How to Build the Vue.js Quiz Application for Production: A Complete Guide
Run npm run build inside the etc/quiz-app directory to generate an optimized production bundle in the dist/ folder, ready for deployment to any static hosting platform.
The quiz application in Microsoft's AI-For-Beginners repository is a Vue 2 single-page application that helps learners test their knowledge of AI concepts. Understanding how to build this Vue.js quiz application for production ensures you can deploy it reliably to platforms like Azure Static Web Apps, Netlify, or GitHub Pages. This guide walks through the complete build process based on the actual source code structure.
Project Structure and Key Files
The quiz application lives in etc/quiz-app/ and follows standard Vue-CLI conventions. Here are the files that control the build process:
| File | Purpose |
|---|---|
etc/quiz-app/package.json |
Defines npm scripts, Vue runtime dependencies (vue, vue-router, vue-i18n), and dev tools (@vue/cli-service) |
etc/quiz-app/src/main.js |
Application entry point that creates the Vue instance and registers plugins |
etc/quiz-app/src/router/index.js |
Configures client-side routing with fallback to NotFound.vue |
etc/quiz-app/src/App.vue |
Root component containing the language selector and <router-view/> |
etc/quiz-app/src/assets/translations/ |
JSON localization files loaded by vue-i18n |
etc/quiz-app/babel.config.js |
Babel preset configuration for transpilation |
etc/quiz-app/README.md |
Documents available npm scripts (serve, build, lint) |
Prerequisites: Installing Dependencies
Before building, install all required packages. The package.json specifies Vue 2.6.x along with @vue/cli-service as the build orchestrator.
cd etc/quiz-app
npm install
This creates a node_modules/ directory with Webpack, Babel, and all plugins needed for the production build pipeline.
Building the Vue.js Quiz Application for Production
The production build is triggered by a single npm script defined in package.json:
npm run build
This command invokes vue-cli-service build, which performs three critical optimizations:
- Transpilation –
babel.config.jsapplies the@vue/cli-plugin-babel/presetto convert modern JavaScript for browser compatibility - Bundling and tree-shaking – Webpack consolidates all JavaScript, CSS, and assets while eliminating dead code
- Minification and hashing – Output files receive content hashes for cache busting (
app.<hash>.js,chunk-vendors.<hash>.js)
The resulting dist/ folder contains:
index.html– The entry HTML file with injected asset referencesjs/– Minified JavaScript chunks split by route and vendor codecss/– Extracted and minified stylesheetsassets/translations/– Copied localization JSON files
Verifying the Production Build Locally
Before deploying, serve the dist/ folder locally to confirm the optimized bundle works correctly:
npx serve -s dist
Navigate to http://localhost:5000 and test that:
- Route navigation functions properly (configured in
src/router/index.js) - Language switching works (via
vue-i18nloading files fromsrc/assets/translations/) - The 404 fallback page appears for unknown routes
Deploying to Azure Static Web Apps
The repository includes documentation for automated deployment via GitHub Actions. The workflow builds the Vue.js quiz application for production and publishes to Azure:
- name: Build And Deploy
id: builddeploy
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }}
action: "upload"
app_location: "etc/quiz-app"
output_location: "dist"
Key configuration values:
app_location: Points toetc/quiz-appwherepackage.jsonresidesoutput_location: Matches the Vue-CLI defaultdist/folder- The action automatically runs
npm run buildbefore deployment
Customizing the Build Configuration
If you need to modify the build behavior, create or edit etc/quiz-app/vue.config.js. Common adjustments include:
- Changing the output directory name
- Configuring public path for subdirectory hosting
- Enabling source maps for debugging
Without this file, Vue-CLI uses sensible defaults optimized for most deployment scenarios.
Summary
Building the Vue.js quiz application for production follows standard Vue-CLI patterns:
- Install dependencies with
npm installin theetc/quiz-appdirectory - Run
npm run buildto generate optimized static files indist/ - Serve
dist/locally withnpx serve -s distfor verification - Deploy
dist/to any static host, or use the provided Azure Static Web Apps workflow for CI/CD - Key dependencies include
vue,vue-router,vue-i18n, and@vue/cli-serviceas defined inpackage.json
Frequently Asked Questions
What version of Vue does the quiz application use?
The quiz application uses Vue 2.6.x as specified in etc/quiz-app/package.json. The project relies on @vue/cli-service for building, which provides Webpack-based tooling optimized for Vue 2 single-file components.
Can I deploy the quiz app to hosts other than Azure?
Yes. The dist/ folder produced by npm run build contains standard static files compatible with any hosting platform including Netlify, Vercel, GitHub Pages, or traditional web servers like Nginx or Apache. No server-side runtime is required.
Why does my production build show a blank page?
This typically indicates an incorrect public path configuration. If hosting in a subdirectory, create etc/quiz-app/vue.config.js and set publicPath to match your deployment URL structure. Also verify that src/router/index.js uses history mode appropriately for your hosting environment.
How do I add new languages to the quiz?
Place additional JSON translation files in etc/quiz-app/src/assets/translations/, then register the new locale in src/main.js where vue-i18n is configured. The language selector in src/App.vue automatically detects available locales.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →