我有一个场景,我必须运行三个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 script和https://github.com/npm/npm/issues/9627)但我需要一个跨平台工作的解决方案。
有办法吗?
答案 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
});
希望它有所帮助。