将npm脚本命令行参数传递给其中的特定脚本

时间:2017-11-29 15:35:43

标签: node.js npm gulp

我有一个场景,我必须运行三个npm脚本才能在我的应用程序中实现一些结果。我把它们合并在一个npm脚本中。这是我的package.json

"scripts": {
    "setup": "npm install && npm run some-script && npm install",
    "some-script": "gulp some-other-script"
}

我想要做的是从命令行向setup脚本传递参数,该脚本将进一步传递给some-script脚本。

如果我运行npm run script -- --abc=123,则在脚本末尾添加参数但我想将其传递给特定脚本(在本例中为npm run some-script)。我还尝试重写脚本定义,如下所示: "setup": "npm install && npm run some-script -- --sample=sample&& npm install"但没有运气。

我知道shell函数(这里描述:Sending command line arguments to npm scripthttps://github.com/npm/npm/issues/9627)但我需要一个跨平台工作的解决方案。

有办法吗?

1 个答案:

答案 0 :(得分:1)

好的我找到了解决方法。

第一个目标是能够使用带参数的脚本,并将其级联到其他脚本的调用中:

npm run main - --arg1 "main": "npm run script1 && npm run script2"

这种方法的问题在于,只能通过在“npm run script1&& npm run script2”行的END处添加传递给npm run main的arg来完成级联。我找不到将它传递给第一个元素的方法:npm run script1

以下是我找到的工作:

首先你需要在package.json中添加:

"config": {
   "arg1": "ARG_VALUE"
},

然后在您的脚本中,您可以将其添加到调用中:

"main": "npm run script_no_arg1 && npm run scrip1 -- --%npm_package_config_arg1% && npm run script2 -- --%npm_package_config_component% && npm run script_no_arg2"

最后,你不需要用任何arg调用它:npm run main 但是你需要在启动脚本之前修改ARG_VALUE:)

最后一件事:在我的情况下,我正在调用gulp任务:

"cleardown": "rimraf build lib",
"inline-build-templates": "gulp inline-build-templates",
"step1": "npm run cleardown && npm run inline-build-templates -- --%npm_package_config_arg1%",

它的工作原理你可以通过这种方式将参数纳入gulp任务:

 gulp.task('inline-build-templates', function() {
   let component = process.argv[3];
   component = component.split('--')[1];
   console.log('RUNNING GULP TASK : inline-build-templates for component ' + component);
   // whatever task gulp
});

希望它有所帮助。