npm 动态传值

163 阅读1分钟

场景

mpa项目为了缩减开发阶段打包时间,需要在执行npm run dev时手动声明打包的入口

process.argv

process.argv 属性返回一个数组,其中包含启动 Node.js 进程时传递的命令行参数。第一个元素是 process.execPath。如果需要访问 argv[0] 的原始值,请参见 process.argv0。第二个元素将是正在执行的 JavaScript 文件的路径。其余元素将是任何其他命令行参数

"scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.config.js",
    "build": "webpack-cli --config build/webpack.prod.config.js",
    "mock": "node mock/server.js"
  },
// 执行npm run dev后argv的值
[  '/usr/local/bin/node',  '/Users/liujia/Documents/yideng/serverlesstest/node_modules/.bin/webpack-dev-server',  '--inline',  '--progress',  '--config',  'build/webpack.dev.config.js']
// 这里面包括执行环境和命令行中的参数

npm动态传值

npmv2后支持动态参数传递

// 当只是做参数传递时 -- --xx 的形式能最大限度的保证传入的参数不被无用
npm run dev -- --foo=3

现在npm调用的命令变成了

webpack-dev-server --inline --progress --config build/webpack.dev.config.js "--foo=3"
// process.argv 
[  '/usr/local/bin/node',  '/Users/liujia/Documents/yideng/serverlesstest/node_modules/.bin/webpack-dev-server',  '--inline',  '--progress',  '--config',  'build/webpack.dev.config.js',  '--foo=3']

⚠️: webpack-cli4会强制校验参数合法性,所以需要用--env传入

npm run dev -- --env=["index","order"]