webpack5 + vue2 多环境命令配置

目的:我想实现一套代码,实现多个命令打包出不同的代码;

修改package.json

{
  "name": "name",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "serve:cp": "vue-cli-service serve --mode dev2",
    "build": "vue-cli-service build",
    "build:cp": "vue-cli-service build --mode prod2"
  },
}

默认情况下,vue-cli项目有三个模式:development,test, production 

  • development 模式用于 vue-cli-service serve
  • test 模式用于 vue-cli-service test:unit
  • production 模式用于 vue-cli-service build 和 vue-cli-service test:e2e

可以通过传递--mode选项参数为命令行覆写默认的模式。

vue-cli-service build --mode development

当运行 vue-cli-service 命令时,所有的环境变量都从对应的环境文件中载入。如果文件内部不包含 NODE_ENV 变量,它的值将取决于模式,例如,在 production 模式下被设置为 "production",在 test 模式下被设置为 "test",默认则是 "development"

NODE_ENV 将决定您的应用运行的模式,是开发,生产还是测试,因此也决定了创建哪种 webpack 配置。

环境变量

可以在项目根目录中放置以下文件来制定环境变量;

.env                # 在所有的环境中被载入
.env.local          # 在所有的环境中被载入,但会被 git 忽略
.env.[mode]         # 只在指定的模式中被载入
.env.[mode].local   # 只在指定的模式中被载入,但会被 git 忽略

环境文件中只包含环境变量,其中  请注意,只有 NODE_ENVBASE_URL 和以 VUE_APP_ 开头的变量可以拿到。

环境文件加载优先级

为一个特定模式准备的环境文件 (例如 .env.production) 将会比一般的环境文件 (例如 .env) 拥有更高的优先级。

只有以 VUE_APP_ 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端侧的包中。你可以在应用的代码中这样访问它们:

console.log(process.env.VUE_APP_SECRET)

除了 VUE_APP_* 变量之外,在你的应用代码中始终可用的还有两个特殊的变量:

  • NODE_ENV - 会是 "development""production" 或 "test" 中的一个。具体的值取决于应用运行的模式
  • BASE_URL - 会和 vue.config.js 中的 publicPath 选项相符,即你的应用会部署到的基础路径。

例如:

package.json为:

"serve:dev": vue-cli-service serve --mode dev
"build:cp": vue-cli-service build --mode prod

对应的文件:

env.dev

env.prod

就可以使用命令:

npm run serve:dev 启动项目;

npm run build:cp 构建项目;

 

posted @ 2022-05-12 18:28  阿兰儿  阅读(951)  评论(0编辑  收藏  举报