vue-cli2 通過(guò)命令打包不同的環(huán)境

vue-cli2 通過(guò)命令打包不同的環(huán)境

前幾天接到一個(gè)需求,就是前端打包需要学搜,用不同的命令將不同的配置打包到環(huán)境當(dāng)中娃善。

之前因?yàn)樽约焊氵^(guò)一段時(shí)間的webpack所以……,抬手就是一個(gè)百度瑞佩。

然后把自己的經(jīng)驗(yàn)分享一下聚磺。

首先我們需要兩個(gè)插件

  • yargs 這個(gè)包是用來(lái)接收命令運(yùn)行腳本的參數(shù)
  • yamljs 解析yaml語(yǔ)法的配置文件
npm install yargs yamljs --save-dev

配置腳本命令

我們打開 package.json文件查看我們平時(shí)用的build命令,一般情況應(yīng)該是下面的樣子炬丸, 為了節(jié)省紙張(其實(shí)懶)省略了部分咧最。

"scripts": {
    "build": "node build/build.js"
}

這里我們添加一個(gè)腳本, 具體命令的名稱可以自己按照情況自己定義,然后執(zhí)行node命令時(shí)御雕,接收的參數(shù)名以及值都可以自己去定義,在接下來(lái)的步驟中滥搭,我們會(huì)在build.js中去拿到它酸纲。

"scripts": {
    "build": "node build/build.js",
  "build_dev": "node build/build.js --e dev"
}

添加配置文件

在目錄下創(chuàng)建/ymls/dev.yml

env: develop
host: www.baidu.com

這里說(shuō)明一下,可以按照需求加入想要的配置瑟匆,文件名也可以自己定義的闽坡。

修改build.js

我們找到根目錄下/build/build.js文件

  • 讀取命名參數(shù)

在文件中引入yargs,讀取命令中的參數(shù)

const argv = require('yargs').argv
  • 使用yamljs解析.yml文件

在這里我封裝了一個(gè)函數(shù),傳入配置文件的名稱(不帶擴(kuò)展名)

const path = require('path')
const yamlJs = require('yamljs')

const readConf = function(env) {
  return env ? yamlJs.load(path.resolve(`ymls/${env}.yml`)) : ''
}

module.exports = readConf
  • 然后我們調(diào)用上面的函數(shù)疾嗅,來(lái)根據(jù)命令中傳入的參數(shù)找到相應(yīng)的配置文件并解析為相應(yīng)的配置對(duì)象外厂。
const readEnvConf = require('./readEnvConf')
const argv = require('yargs').argv
const envConf = readEnvConf(argv.e)

這里我們已經(jīng)成功了一半。

我自己慶幸地以為代承,基本上已經(jīng)搞定了汁蝶。接下來(lái)就是通過(guò) webpack.definePlugin將配置注入到我們打包的文件中去。

直接去將配置merge進(jìn)來(lái)论悴,代碼如下

const conf = {
  plugins: [
    new webpack.definePlugin({
      envConf
    })
  ]
}

// 然后在調(diào)用webpack函數(shù)的時(shí)候?qū)⑺鹠erge進(jìn)去
// 我使用了webpack-merge的一個(gè)插件掖棉,具體使用可以百度一下

按捺不住內(nèi)心的喜悅,趕緊運(yùn)行了一下

npm run build_dev

沒(méi)錯(cuò)膀估,看起來(lái)幔亥,一切正常。

但是運(yùn)行是卻報(bào)錯(cuò):env找不到了察纯。

這個(gè)問(wèn)題窮自己找了很久帕棉,換了不同方式,包括饼记,把之前(原來(lái)腳手架中已經(jīng)有一個(gè)definePlugin)與當(dāng)前合并香伴。任然會(huì)報(bào)錯(cuò)。

最后我在官網(wǎng)的文檔中找到了答案握恳。

image.png

下面是官網(wǎng)為中的示例代碼瞒窒,

new webpack.DefinePlugin({
  PRODUCTION: JSON.stringify(true),
  VERSION: JSON.stringify("5fa3b9"),
  BROWSER_SUPPORTS_HTML5: true,
  TWO: "1+1",
  "typeof window": JSON.stringify("object")
})

收到官網(wǎng)的啟發(fā),我將配置對(duì)象中的每個(gè)值使用JSON.stringfy(), 代碼如下

const strObj = {}
for(let i in envConfig) {
    strObj[i] = JSON.stringify(envConfig[i])
}
// 然后將strObj放入definePlugin中

運(yùn)行打包后乡洼,沒(méi)有報(bào)錯(cuò)崇裁,并且我寫在dev.yml中的文件是可以訪問(wèn)到的。

最后束昵,謝謝查看拔稳!如果有不明白的問(wèn)題,可以給我留言锹雏,我會(huì)很樂(lè)意和你探討巴比。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市礁遵,隨后出現(xiàn)的幾起案子轻绞,更是在濱河造成了極大的恐慌,老刑警劉巖佣耐,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件政勃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡兼砖,警方通過(guò)查閱死者的電腦和手機(jī)奸远,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門既棺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人懒叛,你說(shuō)我怎么就攤上這事丸冕。” “怎么了薛窥?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵胖烛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我拆檬,道長(zhǎng)洪己,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任竟贯,我火速辦了婚禮答捕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屑那。我一直安慰自己拱镐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布持际。 她就那樣靜靜地躺著沃琅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜘欲。 梳的紋絲不亂的頭發(fā)上益眉,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音姥份,去河邊找鬼郭脂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛澈歉,可吹牛的內(nèi)容都是我干的展鸡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼埃难,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼莹弊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起涡尘,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤忍弛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后考抄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體细疚,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年座泳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惠昔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挑势,死狀恐怖镇防,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情潮饱,我是刑警寧澤来氧,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站香拉,受9級(jí)特大地震影響啦扬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凫碌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一扑毡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盛险,春花似錦瞄摊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鹤啡,卻和暖如春惯驼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背递瑰。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工祟牲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泣矛。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓疲眷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親您朽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狂丝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一、什么是JSP JSP:JavaServerPages(Java服務(wù)器端頁(yè)面) JSP就是HTML+Ja...
    提筆執(zhí)江山閱讀 106評(píng)論 0 0
  • 寫在開頭 先說(shuō)說(shuō)為什么要寫這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,292評(píng)論 4 31
  • iRime輸入法導(dǎo)入五筆方案教程 一.準(zhǔn)備工作 1.準(zhǔn)備好要上傳的五筆方案 2.在App Store商店下載iRi...
    Neun29閱讀 796評(píng)論 0 0
  • 不止一個(gè)人跟我說(shuō)過(guò)哗总,幸虧你生的是兒子几颜。 是的,我馬大哈讯屈,粗線條蛋哭,忙起來(lái)糙得不像話,哪里會(huì)養(yǎng)精致小公主涮母? 男孩兒就不...
    嚕嚕890108閱讀 595評(píng)論 0 4
  • 吳家這東彤钟、西、南跷叉、中四院中逸雹,家庭最幸福的應(yīng)該屬西院吳蔚武。但他家的長(zhǎng)子吳澤和次女吳漪卻沒(méi)有成長(zhǎng)為優(yōu)秀的人云挟。一個(gè)篤信...
    windy天意晚晴閱讀 2,517評(píng)論 7 27