如何将命令行参数传递给嵌套脚本?

Don*_*mmy 2 javascript node.js npm node-modules npm-scripts

注:这是不是发送参数传递给顶层的脚本,但被调用的脚本脚本

在我的package.json中,当我调用一个直接接受命令行args的脚本时,它可以工作.但是当我调用一个调用其他脚本的脚本时,它并没有将命令行args传递给它.我如何通过它们?

{
    ...
    "takes-args": "somemodule",
    "calls-takes-args": "npm run takes-args"
}
Run Code Online (Sandbox Code Playgroud)

当我运行以下命令时,args会通过:

npm run takes-args -- -env dev
Run Code Online (Sandbox Code Playgroud)

但是当我通过另一个脚本运行它时,它永远不会得到args.有没有办法让他们失望?也许通过像美元符号这样的可变标记?

//The top-level script gets the args, BUT takes-args does NOT
npm run calls-takes-args -- -env dev
Run Code Online (Sandbox Code Playgroud)

有什么办法吗?

Rya*_*Zim 7

您的scripts字段应如下所示:

{
    ...
    "takes-args": "somemodule",
    "calls-takes-args": "npm run takes-args --"
}
Run Code Online (Sandbox Code Playgroud)

请注意--结尾处calls-takes-args.

您在传递之后传递的任何内容都会--直接附加到您正在运行的脚本上.当你运行时npm run calls-takes-args -- -env dev,这相当于运行npm run takes-args -env dev.当然,这不起作用.

如果添加--to calls-takes-args,则在运行npm run calls-takes-args -- -env devnpm run运行npm run takes-args -- -env dev.成功!

如果你没有传递任何参数calls-takes-args,尾随--不会受到伤害.


编辑:

如果你不能/不想修改你的package.json,你可以运行

npm run calls-takes-args -- -- -env dev
Run Code Online (Sandbox Code Playgroud)

那将会运行somemodule -env dev.