本文将详细介绍如何使用vue CLI多环境配置项目实战,从项目初始化到环境变量配置,再到多环境构建和部署,每一步都详细展开,帮助开发者轻松应对不同环境下的项目需求。
Vue CLI项目初始化为了开始使用Vue CLI进行多环境配置,首先需要创建一个Vue项目。使用Vue CLI可以快速搭建一个Vue项目结构,以下为创建Vue项目的步骤:
node -v npm -v
vue create my-vue-app
Vue CLI提供了一个可选的配置文件.vueconfig.js
,用于定制项目构建选项。默认情况下,Vue CLI会生成一个.vueconfig.js
文件,如果有额外的配置需求,可以在该文件中进行配置。
.vueconfig.js
文件,然后添加自定义配置。例如,配置单页面应用的入口文件、输出路径等:
module.exports = { assetsDir: 'static', // 静态资源路径 outputDir: 'dist', // 构建输出路径 publicPath: '/', // CDN路径 configureWebpack: { resolve: { alias: { '@': './src' // 别名配置 } } }, devServer: { port: 8080, // 服务器端口 host: '0.0.0.0' // 服务器主机名 }, chainWebpack: config => { config.merge({ webpack: require('./webpack.config') }); } };
为了能够在不同的环境中使用不同的配置(例如API地址、数据库连接字符串等),我们需要为每个环境创建一个环境变量文件。
.env
文件,用于存储所有环境的公共配置:
VUE_APP_API_URL=http://localhost:3000
根据需要为不同的环境创建特定的环境变量文件,例如,开发环境.env.development
和生产环境.env.production
:
# .env.development VUE_APP_API_URL=http://dev-api.example.com # .env.production VUE_APP_API_URL=http://prod-api.example.com
在项目中,可以通过process.env.VUE_APP_*
获取这些环境变量。这些变量会被Vue CLI在构建时注入到JavaScript环境中。
export default { mounted() { console.log(process.env.VUE_APP_API_URL); } }
export default { computed: { apiUrl() { return process.env.VUE_APP_API_URL; } } }
使用时,可以在模板中这样调用:
<template> <div> <p>{{ apiUrl }}</p> </div> </template>
为了在不同的环境中进行打包,需要在.vueconfig.js
中设置不同的打包配置文件。
在项目根目录下,创建一个webpack.config.js
文件,用于配置打包设置。例如,配置不同环境下的输出目录:
module.exports = function (env, args) { const path = require('path'); const TerserPlugin = require('terser-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const outputPath = path.resolve(__dirname, 'dist', args.mode); return { mode: args.mode, output: { path: outputPath, filename: '[name].[contenthash].js', chunkFilename: '[name].[contenthash].js' }, plugins: [ new MiniCssExtractPlugin({ filename: '[name].[contenthash].css', chunkFilename: '[name].[contenthash].css' }) ], optimization: { minimizer: [ new TerserPlugin({ cache: true, parallel: true, extractComments: false }) ] } }; };
.vueconfig.js
文件,引入自定义的webpack配置文件:
module.exports = { assetsDir: 'static', // 静态资源路径 outputDir: 'dist', // 构建输出路径 publicPath: '/', // CDN路径 configureWebpack: { resolve: { alias: { '@': './src' // 别名配置 } } }, devServer: { port: 8080, // 服务器端口 host: '0.0.0.0' // 服务器主机名 }, chainWebpack: config => { config.merge({ webpack: require('./webpack.config') }); } };
Vue CLI提供了构建时指定环境的功能,可以通过--mode
参数来选择构建环境。
vue-cli-service build --mode development vue-cli-service build --mode production
为了在不同的环境中使用不同的路由配置,可以在路由配置文件中根据环境变量进行条件判断。
在src/router/index.js
中,使用process.env.VUE_APP_*
来动态设置路由:
import Vue from 'vue'; import Router from 'vue-router'; import Home from '@/views/Home.vue'; import About from '@/views/About.vue'; import Admin from '@/views/Admin.vue'; Vue.use(Router); const routes = [ { path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: About }, process.env.NODE_ENV === 'production' ? { path: '/admin', name: 'Admin', component: Admin } : null ].filter(route => route); export default new Router({ mode: 'history', routes });
在进行API请求时,通常需要根据环境变量设置不同的基础路径。假设使用axios进行请求:
创建一个配置文件src/utils/request.js
,用于设置基础路径:
import axios from 'axios'; export default axios.create({ baseURL: process.env.VUE_APP_API_URL, headers: { 'X-Requested-With': 'XMLHttpRequest' } });
在需要进行API请求的组件或服务中,从配置文件中导入并使用请求方法:
import request from '@/utils/request'; export function fetchUser(id) { return request.get(`/users/${id}`); }
在开发过程中,使用不同的环境变量文件手动切换环境是非常常见的做法。
.env.development
文件:
.env.development
vue-cli-service serve --mode development
在持续集成或开发过程中,自动化测试能够确保环境配置的正确性和一致性。
// jest.config.js module.exports = { setupFilesAfterEnv: ['<rootDir>/src/utils/setupTests.js'], moduleNameMapper: { '^@/(.*)$': '<rootDir>/src/$1' }, testEnvironment: 'jsdom', transform: { '^.+\\.vue$': 'vue-jest', '^.+\\.js$': 'babel-jest' }, testPathIgnorePatterns: ['/node_modules/'], coverageDirectory: 'coverage', clearMocks: true, transformIgnorePatterns: ['<rootDir>/node_modules/'], coveragePathIgnorePatterns: ['/node_modules/'], coverageThreshold: { global: { statements: 90, branches: 80, functions: 80, lines: 80 } } };
src/utils/setupTests.js
中,配置环境变量:
process.env.NODE_ENV = 'test'; process.env.VUE_APP_API_URL = 'http://test-api.example.com';
在发布项目时,需要分别打包不同的环境代码。
vue-cli-service build --mode development vue-cli-service build --mode production
dist
目录下看到不同环境的输出文件。在部署代码时,需要将打包好的代码上传到相应的服务器,并进行相应的配置和启动操作。
scp -r dist/ user@server:/path/to/deploy
export VUE_APP_API_URL=http://prod-api.example.com
sudo systemctl start nginx
通过以上步骤,可以实现Vue项目在不同环境下的顺利构建和部署。同时,为项目添加环境变量配置文件、动态设置路由和API请求路径,可以确保项目在不同环境下能够顺利运行和调试。