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

4

我有一个场景,需要运行三个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函数(在这里描述:向npm脚本发送命令行参数https://github.com/npm/npm/issues/9627),但我需要一个跨平台的解决方案。
有没有办法做到这一点?

你好,你找到如何实现这个了吗?我也有同样的用例使用 ;) - Deunz
脚本问题似乎来自于 && 部分。 - Deunz
1个回答

1

好的,我找到了一个解决方法。

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

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

这种方法的问题在于,级联只会通过将传递给 npm run main 的参数添加到“npm run script1 && npm run script2”行的末尾来完成。我找不到将其传递给第一个元素 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"

最后,您无需使用任何参数调用它: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
});

希望它有所帮助。

1
是的,似乎无法为链中除最后一个脚本以外的任何其他脚本从命令行提供参数。你的解决方案接近我想要的,但我不想每次执行此命令时都更改 package.json 中的某些属性。无论如何,还是谢谢。 - metodribic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接