Vue+webpack項目的多環境打包配置(vue-cli 2.x)


背景:由於需要將應用部署到線上開發環境、線上測試環境、線上預發環境、線上生產環境,而每個環境的訪問地址是不同的。如果每次更改請求地址未免有些繁瑣,就考慮在本地進行一次性配置。

代碼管理工具git

代碼分支

1.0-dev    // 開發分支

1.0-test   // 測試分支

1.0-pre    // 預發分支

1.0         // 正式分支

應用部署服務器:阿里雲服務器

一、安裝依賴:cross-env

使用cross-env解決跨平台設置環境變量的問題

安裝:npm i --save-dev cross-env

二、修改項目package.json文件

"scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "lint": "eslint --ext .js,.vue src --fix",
    "build:dev": "cross-env NODE_ENV=development ENV_CONFIG=dev node build/build.js",
    "build:test": "cross-env NODE_ENV=testing ENV_CONFIG=test node build/build.js",
    "build:pre": "cross-env NODE_ENV=presentation ENV_CONFIG=pre node build/build.js",
    "build:prod": "cross-env NODE_ENV=production ENV_CONFIG=prod node build/build.js"
  },

 

如圖所示

這里是修改打包命令,以后打包將使用以下命令:

線上開發環境:npm run build:dev
線上測試環境:npm run build:test
線上預發環境:npm run build:pre
線上生產環境:npm run build:prod
NODE_ENV=xxx ENV_CONFIG=xxx 將設置 webpack 打包時的 NODE_ENV、 ENV_CONFIG 環境變量

三、修改項目config配置文件

修改項目config目錄下的以下文件

1、 添加test.env.js文件

'use strict'
module.exports = {
  NODE_ENV: '"testing"',
  ENV_CONFIG: '"test"',
  API_ROOT: '"http://(線上測試環境請求地址)"'
}

2、添加pre.env.js文件

'use strict'
module.exports = {
  NODE_ENV: '"presentation"',
  ENV_CONFIG: '"pre"',
  API_ROOT: '"http://(線上預發環境請求地址)"'
}

3、修改dev.env.js文件

'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')

// 獲取NODE_ENV參數
const env = process.env.NODE_ENV

module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  ENV_CONFIG: '"dev"',
  API_ROOT: env === 'development' ? '"http://(線上開發環境請求地址)"' : '"/api"' // dev環境配制了服務代理,API_ROOT的api是配制的代理地址
})

4、修改prod.env.js文件

'use strict'
module.exports = {
  NODE_ENV: '"production"',
  ENV_CONFIG: '"prod"',
  API_ROOT: '"http://(線上生產環境請求地址)"'
}

5、修改index.js文件

由於本地運行時會產生瀏覽器跨域的問題,在此文件中配置服務代理。

dev參數下修改如下配置:

proxyTable: {
  '/api': {
    target: 'http://(本地開發環境請求地址)',
    changeOrigin: true, // 是否允許跨域
    pathRewrite: {
      '^/api': '' // 重寫
 } },
},

 // api是配制的代理地址

如下圖所示

build參數下添加如下參數

devEnv: require('./dev.env'),
testEnv: require('./test.env'),
preEnv: require('./pre.env'),
prodEnv: require('./prod.env'),

參數名與文件名對應,此處參數將在 build/webpackage.prod.conf.js 中使用到

將 build 參數下的 assetsPublicPath 參數值修改為 ’./’

如下圖所示

config目錄結構如圖

 

四、修改項目build配置文件

修改項目build目錄下的以下文件

1、 修改build.js文件

// process.env.NODE_ENV = 'production'  // 將此行代碼注釋

// const spinner = ora('building for production...')
const spinner = ora('building for ' + process.env.NODE_ENV + ' of ' + process.env.ENV_CONFIG + ' production...')

如圖所示

2、修改utils.js文件

添加各打包環境設置

原代碼
exports.assetsPath = function (_path) {
  const assetsSubDirectory = process.env.NODE_ENV === 'production'
    ? config.build.assetsSubDirectory
    : config.dev.assetsSubDirectory

  return path.posix.join(assetsSubDirectory, _path)
}

修改后 exports.assetsPath
= function (_path) { const assetsSubDirectory = process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'testing' || process.env.NODE_ENV === 'presentation' ? config.build.assetsSubDirectory : config.dev.assetsSubDirectory return path.posix.join(assetsSubDirectory, _path) }

這里涉及到打包和本地運行時所讀取的config/index.js文件中的assetsSubDirectory參數路徑

3、修改webpack.base.conf.js文件

添加各打包環境設置

原代碼
output: {
    path: config.build.assetsRoot,
    filename: '[name].js',
    publicPath: process.env.NODE_ENV === 'production'
      ? config.build.assetsPublicPath
      : config.dev.assetsPublicPath
  },


修改后
output: {
    path: config.build.assetsRoot,
    filename: '[name].js',
    publicPath: process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'testing' || process.env.NODE_ENV === 'presentation'
      ? config.build.assetsPublicPath
      : config.dev.assetsPublicPath
  },

 

4、修改webpack.prod.conf.js文件

 

原代碼
const env = require('../config/prod.env')


修改后
const env = config.build[process.env.ENV_CONFIG+'Env']

如圖所示

將會根據各打包環境設置的參數選擇讀取 config/index.js 文件下 build 參數中設置的環境配置參數,從而讀取到 config 目錄下配置的各打包環境的js文件

 

5、修改vue-loader.conf.js文件

添加各打包環境設置

原代碼:
const isProduction = process.env.NODE_ENV === 'production'
const sourceMapEnabled = isProduction
  ? config.build.productionSourceMap
  : config.dev.cssSourceMap


修改為:
// const isProduction = process.env.NODE_ENV === 'production'
const isProduction = process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'testing' || process.env.NODE_ENV === 'presentation'
const sourceMapEnabled = isProduction
  ? config.build.productionSourceMap
  : config.dev.cssSourceMap

 

 

五、項目中HTTP請求設置

注意符號不是單引號而是反引號

本項目中所有請求統一在api文件中管理,在js文件中獲取到各環境配置的請求地址將其添加到請求路徑中。

 

如果是直接在文件中調用可將請求地址參數掛載到Vue上進行全局調用

main.js文件中添加

Vue.prototype.baseURL = process.env.API_ROOT

使用時請求路徑參數為

url: `${this.baseURL}/platform/systemUser/login`

六、修改項目部署配置文件(xxx.release

由於項目在阿里雲發布,創建應用發布時會生成對應應用的部署配置文件(應用名.release),修改文件中的打包參數。如圖

線上開發環境是單獨創建的一個應用,所以在另外的應用部署配置文件中設置,設置方式相同。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM