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中的文件是可以访问到的。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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