vue-cli2 通过命令打包不同的环境

vue-cli2 通过命令打包不同的环境

前几天接到一个需求,就是前端打包需要,用不同的命令将不同的配置打包到环境当中。

之前因为自己搞过一段时间的webpack所以……,抬手就是一个百度。

然后把自己的经验分享一下。

首先我们需要两个插件

  • yargs 这个包是用来接收命令运行脚本的参数
  • yamljs 解析yaml语法的配置文件
npm install yargs yamljs --save-dev

配置脚本命令

我们打开 package.json文件查看我们平时用的build命令,一般情况应该是下面的样子, 为了节省纸张(其实懒)省略了部分。

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

这里我们添加一个脚本, 具体命令的名称可以自己按照情况自己定义,然后执行node命令时,接收的参数名以及值都可以自己去定义,在接下来的步骤中,我们会在build.js中去拿到它。

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

添加配置文件

在目录下创建/ymls/dev.yml

env: develop
host: www.baidu.com

这里说明一下,可以按照需求加入想要的配置,文件名也可以自己定义的。

修改build.js

我们找到根目录下/build/build.js文件

  • 读取命名参数

在文件中引入yargs,读取命令中的参数

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

在这里我封装了一个函数,传入配置文件的名称(不带扩展名)

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

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

module.exports = readConf
  • 然后我们调用上面的函数,来根据命令中传入的参数找到相应的配置文件并解析为相应的配置对象。
const readEnvConf = require('./readEnvConf')
const argv = require('yargs').argv
const envConf = readEnvConf(argv.e)

这里我们已经成功了一半。

我自己庆幸地以为,基本上已经搞定了。接下来就是通过 webpack.definePlugin将配置注入到我们打包的文件中去。

直接去将配置merge进来,代码如下

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

// 然后在调用webpack函数的时候将他merge进去
// 我使用了webpack-merge的一个插件,具体使用可以百度一下

按捺不住内心的喜悦,赶紧运行了一下

npm run build_dev

没错,看起来,一切正常。

但是运行是却报错:env找不到了。

这个问题穷自己找了很久,换了不同方式,包括,把之前(原来脚手架中已经有一个definePlugin)与当前合并。任然会报错。

最后我在官网的文档中找到了答案。

image.png

下面是官网为中的示例代码,

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

收到官网的启发,我将配置对象中的每个值使用JSON.stringfy(), 代码如下

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

运行打包后,没有报错,并且我写在dev.yml中的文件是可以访问到的。

最后,谢谢查看!如果有不明白的问题,可以给我留言,我会很乐意和你探讨。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容

  • 一、什么是JSP JSP:JavaServerPages(Java服务器端页面) JSP就是HTML+Ja...
    提笔执江山阅读 106评论 0 0
  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,285评论 4 31
  • iRime输入法导入五笔方案教程 一.准备工作 1.准备好要上传的五笔方案 2.在App Store商店下载iRi...
    Neun29阅读 791评论 0 0
  • 不止一个人跟我说过,幸亏你生的是儿子。 是的,我马大哈,粗线条,忙起来糙得不像话,哪里会养精致小公主? 男孩儿就不...
    噜噜890108阅读 593评论 0 4
  • 吴家这东、西、南、中四院中,家庭最幸福的应该属西院吴蔚武。但他家的长子吴泽和次女吴漪却没有成长为优秀的人。一个笃信...
    windy天意晚晴阅读 2,514评论 7 27