npm script之传参
一、前言
最近和同事在研究怎么利用webpack实现在不修改任何代码的前提下动态打包。因为目前的项目里面放了n多个子模块,每次打包执行npm run build,结果就是打包了全部的代码,这样不仅打包后的文件特别大臃肿,而且也影响性能,于是才有了想要哪几个模块打包哪几个模块的想法,当然,为了后期的维护问题,当然不能是打包一次修改一次代码。
既然需求是不能修改代码,那我怎么知道你需要哪些模块呢?
二、动态npm脚本
不能改代码,那就只能改脚本了,思路也有两种:动态脚本和脚本传参
2.1动态脚本
动态脚本,此处是指 不同的脚本命令,比如,你要打包A系统,你就运行npm run buid A,你要打包B系统,你就运行npm run buid B ,方法可行,但缺点也是显而易见的,你需要定义多个不同的npm脚本,随着后面项目变大,npm 脚本数量会越来越多,不利于后期维护。所以,此路不通!
2.2脚本传参
否定了动态脚本后,就只剩下脚本传参了,而这里的脚本传参不像是我在网上找到的大多数的那样,参数是确定的写死的,这里的参数肯定是动态的,而且在你在电脑上敲出打包命令后动态传入的。
一般npm 脚本传参:在具体命令上
取参数: 通过 process.argv
const [, , key] = process.argv;
预期的传参: 如图,应该是在select之后
取参数:???(未知)
2.2.1 传参到具体的命令上
各种查阅资料后,突然想着我为啥非要纠结于参数放在 “命令的简称”,比如npm run build上呢?为啥不直接在实际执行的命令上呢?这样也可以动态呀!
确实,这样完全可以实现,等条件打包完全实现后,又觉得有点别扭,毕竟,正常情况下,用的都是“简称”,那么怎么能实现根据打包命令动态传参实现动态打包呢?
2.2.12理想中的npm script传参
昨天各种查阅资料,今早边吃早点边看这个问题,突发奇想的试了试,居然可以了
哈哈哈哈,什么是踏破铁鞋无觅处得来全不费工夫,居然实现了!
原来,process.argv不仅可以接收命令里面固定的参数,也能接收使用命令时动态传入的参数!
总结:
传参:
对于npm 命令:照常写即可;
使用时:
npm run XXX param ,比如:npm run select asystem
接参:
const [, , param] = process.argv;
三、参考链接:
阮一峰的npm script
http://www.ruanyifeng.com/blog/2016/10/npm_scripts.html