假設乙個專案 需要有開發環境(dev), 測試環境(test), 正式環境(prod), 並且三種環境都要build打包的需要;
前提是已通過vue-cli初始化了專案;
1.先在page.json中配置指令碼命令
// 開發環境啟動
"serve:dev"
:"webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"
,//測試環境啟動
"serve:test"
:"webpack-dev-server --inline --progress --config build/webpack.test.conf.js"
,// 生產環境啟動 待定
// "serve:prod": "webpack-dev-server --inline --progress --config build/webpack.test.prod.js",
//開發環境打包
"build:dev"
:"node_env=development env_config=dev node build/build.js"
,//測試環境打包
"build:test"
:"node_env=test env_config=test node build/build.js"
,//生產環境打包
"build:prod"
:"node_env=production env_config=prod node build/build.js"
,
注意:npm指令碼的引數,如 node_env 和 env_config 都可在全域性變數process.env
中取到
2. 新增檔案及修改**
1.在build目錄下新增 webpack.test.conf.js 檔案, 在config檔案下新增test.env.js
2.複製 build/webpack.dev.conf.js 內容到 webpack.test.conf.js, 複製config/dev.env.js內容到test.env.js
3. 修改 webpack.test.conf.js檔案
new
webpack.defineplugin()
,
4.config/dev.env.js檔案內容為
'use strict'
const merge =
require
('webpack-merge'
)const prodenv =
require
('./prod.env'
)module.exports =
merge
(prodenv,
)
5.config/test.env.js檔案內容為
'use strict'
const merge = require('webpack-merge')
const prodenv = require('./prod.env')
module.exports =
3.執行驗證
此時執行啟動命令 如npm run serve:test
通過執行build/webpack.test.conf.js
檔案 並設定'process.env': require('../config/test.env')
這樣跑起來的專案 就可通過process.env拿到不同網域名稱位址和引數
可在src/api/base.js 中(我做的專案是這麼搞得)
4.接下來說打包
修改 build/webpack.prod.conf.js檔案
// 14行:
const env = require('../config/prod.env')
// 修改改為
const env = require('../config/' + process.env.env_config + '.env');
注:其中的process.env.env_config
已通過npm命令傳遞
node_env=test env_config=test node build/build.js
直接執行打包命令驗證即可
//啟動執行 並配置啟動命令
"dev": "cross-env node_env=development webpack-dev-server --config build/webpack.config.dev.js",
// 打包方式1執行打包檔案
"build": "cross-env node_env=production webpack --config build/webpack.config.prod.js"
// 打包方式2
"builddev": "cross-env node_env=development env_config=dev node build/build.js",
"build": "cross-env node_env=production env_config=prod node build/build.js",
###擴充套件 既然build時可以傳引數 那麼啟動專案時為何不傳參呢??
改變npm指令碼
"serve:dev"
:"node_env=development env_config=dev webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"
,"serve:test"
:"node_env=test env_config=test webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"
,// 經驗證這個正式環境不能這樣搞
// "serve:prod": "node_env=production env_config=prod webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
刪除多餘的webpack.test.conf.js檔案; 修改webpack.dev.conf.js檔案
new
webpack.defineplugin()
,
經過上述發現最優配置為:
安轉cross-env
在命令中指定 env_config
配置不同的全域性變數即可
"serve:dev"
:"cross-env env_config=dev webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"
,"serve:test"
:"cross-env env_config=test webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"
,"serve:prod"
:"cross-env env_config=prod webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"
,"build:prod"
:"cross-env env_config=prod node build/build.js"
,"build:dev"
:"cross-env env_config=dev node build/build.js"
,"build:test"
:"cross-env env_config=test node build/build.js"
webpack.dev.config.js 48行
new webpack.defineplugin(),
webpack.prod.config.js 15行
const env = require('../config/' + process.env.env_config + '.env');
config/dev.env.js
'use strict'
const merge =
require
('webpack-merge'
)const prodenv =
require
('./prod.env'
)module.exports =
merge
(prodenv,
)
config/prod.env.js
'use strict'
module.exports =
config/test.env.js
'use strict'
// const merge = require('webpack-merge')
// const prodenv = require('./prod.env')
module.exports =
webpack中loader及Vue配置
1.loader是webpack中乙個非常核心的概念 2.webpack主要是用來處理我們寫的js 並且webpack會自動處理js之間複雜的依賴關係 3.但是在開發中,我們不僅有基本的js 處理,也需要載入css 甚至一些高階的轉換。對於webpack本身能力來說,對於這些轉化是不支援的,而web...
簡單配置webpack4 vue
1.建立webpack4 vue資料夾 mkdir webpack4 vue cd webpack4 vue 2.初始化npm npm init y 3.安裝相關依賴 npm i d webpack webpack cli webpack dev server vue vue loader vue ...
webpack中結合Vue使用
1 安裝vue的包 cnpm i vue s 2 由於在webpack中,推薦使用.vue這個元件模板檔案定義元件,所以需要安裝能解析這個檔案的loader cnpm i vue loader vue template compiler d 3 在main.js中,匯入vue模組 import vu...