欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

npm script之传参

程序员文章站 2022-05-10 23:33:19
...

一、前言

         最近和同事在研究怎么利用webpack实现在不修改任何代码的前提下动态打包。因为目前的项目里面放了n多个子模块,每次打包执行npm run build,结果就是打包了全部的代码,这样不仅打包后的文件特别大臃肿,而且也影响性能,于是才有了想要哪几个模块打包哪几个模块的想法,当然,为了后期的维护问题,当然不能是打包一次修改一次代码

        既然需求是不能修改代码,那我怎么知道你需要哪些模块呢?

二、动态npm脚本

         不能改代码,那就只能改脚本了,思路也有两种:动态脚本和脚本传参

2.1动态脚本

        动态脚本,此处是指  不同的脚本命令,比如,你要打包A系统,你就运行npm run buid A,你要打包B系统,你就运行npm run buid B ,方法可行,但缺点也是显而易见的,你需要定义多个不同的npm脚本,随着后面项目变大,npm 脚本数量会越来越多,不利于后期维护。所以,此路不通!

2.2脚本传参

        否定了动态脚本后,就只剩下脚本传参了,而这里的脚本传参不像是我在网上找到的大多数的那样,参数是确定的写死的,这里的参数肯定是动态的,而且在你在电脑上敲出打包命令后动态传入的

       一般npm 脚本传参:在具体命令上

npm script之传参

       取参数:   通过   process.argv

const [, , key] = process.argv;

      预期的传参: 如图,应该是在select之后

npm script之传参

      取参数:???(未知)

    2.2.1 传参到具体的命令上

        各种查阅资料后,突然想着我为啥非要纠结于参数放在 “命令的简称”,比如npm run build上呢?为啥不直接在实际执行的命令上呢?这样也可以动态呀!

npm script之传参

        确实,这样完全可以实现,等条件打包完全实现后,又觉得有点别扭,毕竟,正常情况下,用的都是“简称”,那么怎么能实现根据打包命令动态传参实现动态打包呢?

   2.2.12理想中的npm script传参

   昨天各种查阅资料,今早边吃早点边看这个问题,突发奇想的试了试,居然可以了

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