vue不同环境打包配置不同 vue环境变量配置

4 篇文章 0 订阅

vue-clic创建vue项目

可以创建vue2和vue3项目,可以看文章安装vue-cli2和3以及创建vue2和vue3项目的步骤及区别
可以用vue init webpack pro1创建vue2项目,(这种方式创建的 vue和webpack版本分别为
"vue": "^2.5.2","webpack": "^3.6.0","webpack-dev-server": "^2.9.1","vue-router": "^3.0.1"

也可以用最新的vue-cli命令vue create pro2
创建vue2("vue": "^2.6.14","webpack": "^5.54.0","webpack-dev-server": "^4.11.1","vue-router": "^3.5.1", "vuex": "^3.6.2")
vue3项目("vue": "^3.2.13","webpack": "^5.54.0","webpack-dev-server": "^4.11.1","vue-router": "^4.0.3", "vuex": "^4.0.0",)

我们主要看vue-cli2和vue3+打包出来的vue2项目

打包出来的文件直接在浏览器打开

  1. vue-cli2+打包出来的项目,在浏览器上打开报错
    在这里插入图片描述
    解决办法:
    在config文件夹下的index.js中修改 assetsPublicPath: ‘./’

vue-cli3在vue.config.js中加publicPath:'./'

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  publicPath:'./'
})

vue 不同环境打包 配置不同

vue-cli2+打包的项目

工具:cross-env

工具:cross-env:运行跨平台设置和使用环境变量的脚本
理解:当您使用NODE_ENV =production, 来设置环境变量时,大多数Windows命令提示将会阻塞(报错)。这个迷你的包(cross-env)能够提供一个设置环境变量的scripts,让你能够以unix方式设置环境变量,然后在windows上也能兼容运行。

1. 安装cross-env
npm install --save-dev cross-env
2. 建立环境配置

默认config文件夹有三个文件,dev.env.js/index.js/prod.env.js
打包不同环境设置不同变量,比如,打sit包,uat包,对生产加不同变量文件配置
config->prod.sit.env.js文件

'use strict'
module.exports = {
  // 生产环境,上线时使用此配置
  NODE_ENV: '"production"',
  ENV_CONFIG: '"prod"',
  KEY: '"2222222PRODDEVSHKLO667DDDD"'
}

config->prod.uat.env.js文件

'use strict'
module.exports = {
  // uat环境专用配置
  NODE_ENV: '"production"',
  ENV_CONFIG: '"uat"',
  KEY: '"33333333UATVSHKLO667DDDD"'
}

环境变量也可以引入变量;比如:
可以把请求的路径设置成变量,在命令行中去赋值

"build:test": "cross-env NODE_ENV=production env_config=test request_url=https://111.222.com  node build/build.js"


const {request_url = ""} = process.env;
module.exports = {
    NODE_ENV: '"production"',
    BASE_API: `'${request_url}'`
};

env配置文件,不是在浏览器运行的,也不会打包进最终的代码,它只是对于项目编译的控制,所以拿不到window

3. 在npm脚本中使用
"build--sit":"cross-env NODE_ENV=production  ENV_CONFIG=sit  node build/build.js",
"build--uat":"cross-env NODE_ENV=production  ENV_CONFIG=uat  node build/build.js",
"build--dev":"cross-env node build/build.js",
4.webpack打包文件解析打包命令

通过打包命令(比如:npm run build--uat),获取到NODE_ENV=production ENV_CONFIG=uat两个参数
在build -> webpack.prod.conf.js文件中获取命令行参数,并引入配置

const env = process.env.ENV_CONFIG ? 
require('../config/prod.' + process.env.env_config + '.env') : 
require('../config/prod.env')

5.在项目中使用变量
<template>
  <div id="app">
    测试环境变量{{ test }}
    <router-view/>
  </div>
</template>
<script>
export default {
  name: 'App',
  data(){
    return {
      test: process.env.KEY,
    }
  }
}
</script>
6.打包文件成功引用对应环境变量

在这里插入图片描述
webpack-dev-server2+ 不支持–mode参数

vue-cli3+打包的项目

一、通过在项目的根目录下新建 .env.xxx 文件,–mode去识别环境变量的方式
  1. 在项目的根目录下新建 .env.xxx 文件
    在这里插入图片描述
    如上,四个 .env.xxx 文件后缀名(文件后缀名可自定义)为development、prod、prod.uat、test,可分别对应为开发环境、生产环境、uat环境和测试环境。可以根据需要自由创建,只要到时候对应到命令行中,能找得到就行

  2. 每个环境都会加载的变量 .env
    如果还需要设置每个环境都需要加载的变量,则可以添加 .env 文件,如果没有,则可以不建此文件。(即每个环境对应变量的变量值都是一样的时候,则可以将变量定义在公用的.env文件中,而对应每个环境的 .env.xxx文件中则不需要再重复定义此变量)

  3. 在对应环境的 .env.xxx 文件中添加变量
    .在.env.xxx 文件中只有 NODE_ENV,BASE_URL 和以 VUE_APP_ 开头的变量会通过 webpack.DefinePlugin 静态地嵌入到客户端侧的代码中。

  • NODE_ENV : 主要用于标识当前的环境
  • BASE_URL: vue.config.js 中的 publicPath 选项相符,即你的应用会部署到的基础路径
  • VUE_APP_* : 自定义变量

.env.development

NODE_ENV=development
VUE_APP_TESTID=121212development

.env.prod

NODE_ENV=production
VUE_APP_TESTID=1ddddddd

.env.prod.uat

NODE_ENV=production
VUE_APP_TESTID=UATtttt1ddddddd

可以根据需要,自由添加配置文件,只要命令行与文件名一致就行
4. package.json配置对应环境打包命令

"serve:dev": "vue-cli-service serve --mode development",
"serve:test": "vue-cli-service serve --mode test",
"serve:prod": "vue-cli-service serve --mode prod",
"serve:uat": "vue-cli-service serve --mode prod.uat",
"serve": "vue-cli-service serve",
"build": "vue-cli-service build --mode prod",
"build:test": "vue-cli-service build --mode test",

vue-cli-service build --mode test :命令中的test对应的是 .env.xxx 文件的后缀名,如果也找不到.env.test文件,则打包报错

注意,vue-cli2+打包的vue2项目没有–mode参数,不能用这种方式设置环境变量
5. 在vue组件中和index.html中使用变量

在inde.html中这么引入变量<%= VUE_APP_TESTID %>
在组件中还是这么引入process.env.VUE_APP_TESTID

二、通过cross-env的方式

思路还是一样的,命令行设置一个变量ENV_CONFIG=prod,在配置文件中获取,然后根据变量值,去获取对应的配置文件,然后赋值给process.env

  1. 安装cross-env
npm install --save-dev cross-env
  1. 建立环境配置
    新建config文件夹,新建prod.[对应命令行变量].env.js打包不同环境设置不同变量,比如,打sit包,uat包,对生产加不同变量文件配置
    config->prod.sit.env.js文件、config->prod.uat.env.js文件等
'use strict'
module.exports = {
  ENV_CONFIG: '"prod"',
  VUE_APP_KEY: '"2222222PRODDEVSHKLO667DDDD"'
}
  1. 在npm脚本中使用
"serve": "vue-cli-service serve",
"serve:test": "cross-env NODE_CONFIG=test vue-cli-service serve",
"build": "vue-cli-service build",
"build:env1": "cross-env NODE_CONFIG=prod vue-cli-service build",
"build:env2": "cross-env NODE_CONFIG=uat vue-cli-service build",
"lint": "vue-cli-service lint"
  1. webpack配置文件 vue.config.js 解析打包命令
    通过打包命令(比如:npm run serve:test),获取到NODE_CONFIG=test参数

在 vue.config.js文件中获取命令行参数,并引入配置

console.log(NODE_CONFIG)
const env = process.env.NODE_CONFIG? 
require('../config/prod.' + process.env.NODE_CONFIG+ '.env') : 
require('../config/prod.env')
console.log(env)

const { defineConfig } = require('@vue/cli-service')
const webpack = require('webpack');
module.exports = defineConfig({
  transpileDependencies: true,
  publicPath: './',
  configureWebpack: {
    plugins: [
      new webpack.DefinePlugin({
        'process.env': env
      })
    ]
  }

但是会报错重复定义process.env,后续还得查查怎么完善
在这里插入图片描述

  1. 在项目中使用变量

process.env.VUE_APP_KEY

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue项目中,可以通过配置不同环境变量来根据不同环境配置域名。这样在打包时,可以根据不同环境自动切换域名。 首先,在Vue项目的根目录下,找到`config`文件夹,里面有一个`index.js`文件,这是项目的配置文件。 在`index.js`文件中,可以找到`module.exports`对象,里面定义了一些配置项。我们需要添加一个新的配置项来设置不同环境下的域名。 以下是一个示例: ```javascript module.exports = { // ... production: { // 生产环境配置 domain: 'www.example.com' }, development: { // 开发环境配置 domain: 'dev.example.com' }, // ... } ``` 在上面的示例中,我们添加了两个配置项,分别是`production`和`development`。你可以根据需要添加更多的配置项,比如测试环境等。 接下来,在你的代码中,可以通过访问`process.env`来获取当前环境配置。例如,你可以在API请求中使用这个配置项: ```javascript const apiDomain = process.env.NODE_ENV === 'production' ? process.env.production.domain : process.env.development.domain; axios.get(`http://${apiDomain}/api/data`) .then(response => { // 处理响应 }) .catch(error => { // 处理错误 }); ``` 在上面的示例中,我们通过判断`process.env.NODE_ENV`的值来确定当前的环境,然后根据不同环境获取对应的域名配置。 最后,在打包时,可以使用不同环境变量来指定要打包环境。比如,你可以使用以下命令来打包生产环境的代码: ```shell NODE_ENV=production npm run build ``` 这样就可以根据不同环境配置域名,并在打包时自动切换域名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值