我有一个类似于这个的package.json:
"scripts": {
"dev": "cross-env BABEL_ENV=client webpack --config webpack/client.development.js && yarn dev:stub-server | cross-env BABEL_ENV=server babel-node src/server/server.js",
"dev:stub-server": "./node_modules/.bin/robohydra ./stubs/robohydra-config.json -p 3100"
}
我在代码中添加了一些逻辑,以根据命令行参数更改dev:stub-server
的配置方式。因此,每当我运行以下内容时,我都会得到我期望的结果:
yarn dev:stub-server --results=4
$ ./node_modules/.bin/robohydra ./stubs/robohydra-config.json -p 3100 -- --results=4
如您所见,选项将转发到底层脚本,一切都按预期工作。
我的问题是我无法将--results
从yarn dev
命令传播到dev:stub-server
的正确位置。父脚本运行dev:stub-server
,但参数最后会转发到底层脚本,如下所示:
yarn dev --results=2
$ cross-env BABEL_ENV=client webpack --config webpack/client.development.js && yarn dev:stub-server | cross-env BABEL_ENV=server babel-node src/server/server.js --results=2
有没有办法让上述工作如下呢?
yarn dev --results=2
$ cross-env BABEL_ENV=client webpack --config webpack/client.development.js && yarn dev:stub-server --results=2 | cross-env BABEL_ENV=server babel-node src/server/server.js
提前致谢!
答案 0 :(得分:5)
Yarn's run
仅支持将args
附加到命令链的末尾,并且至少截止日期为2018-06-14,没有办法覆盖它。
当我过去需要这个时,我已经制作了我自己的dev.js
脚本,这个脚本由我的package.json
调用,然后将环境变量拉出来。
答案 1 :(得分:1)
在Mac上,我正在使用:
"scripts": {
"benchmark": "sh -c 'ng run ${0}:benchmark'",
}
然后我调用yarn benchmark editor
,其中editor
是我的参数。
答案 2 :(得分:1)
就目前而言,使用 yarn 1.22.4
您可以执行 yarn exec tsc -- --help
。附加 --
可以解决问题
答案 3 :(得分:0)
或者,您可以在脚本中使用*.env
文件和变量cat
。
"run":"docker build -t --build-arg VAR=`cat vars.env` -f Dockerfile .
例如
答案 4 :(得分:0)
我在这里发布了一些内容(两行代码)。 https://stackoverflow.com/a/65265945/12463120
要注意的是,Webpack没有转发CLI。因此,您必须先保存它们。
// webpack.config.js
process.env.MY_APPLICATION_NAME_ARGS = JSON.stringify(process.argv)
// your.script.js
const myArgs = JSON.parse(env.MY_APPLICATION_NAME_ARGS )
答案 5 :(得分:0)
一种简单的实现方法是使用an inline Bash function来编写parameter expansion with $*
:
"scripts": {
"dev": "wrap () { node index.js \"$*\" | cat; }; wrap"
}
使用yarn dev foo bar
调用上面的命令将运行node index.js foo bar
,然后将结果作为演示通过管道传递到cat
。
您可以在命令的开头和结尾处添加命令,只需记住这里需要使用半角符号。
对于涉及更多的内容,您可能需要一个独立的脚本。
答案 6 :(得分:0)
使用 npm 功能将命名的自定义参数传递给命令行作为 yarn 命令的代理:
"scripts": {
"yarn-cmd": "npm run npm-cmd --foo=bar",
"npm-cmd": "echo \"foo value is $npm_config_foo\""
}
运行yarn yarn-cmd