我有一个托管子项目并包含常见依赖项的超级项目:
super
node_modules
.bin
foo-binary
foo-binary.exe
foo
sub
node_modules
package.json
package.json
我需要能够以foo
NPM脚本的身份调用super
:
super / package.json
"scripts": {
"foo": "foo-binary" <-- should run with super/sub/ as CWD
}
在这种情况下,foo-binary
以super/
作为CWD运行,而它应该以{{1}}运行。使用super/sub/
会导致跨平台问题;带有反斜杠的cd
在Windows上有效,但* nix操作系统不起作用,而带有正斜杠的cd sub && ..\\node_modules\\.bin\\foo-binary
在Windows上无效(在Windows 7上测试):
“ ..”未被识别为内部或外部命令,可操作程序或批处理文件
或者我需要能够以cd sub && ../node_modules/.bin/foo-binary
NPM脚本的身份调用foo
:
super / sub / package.json
super
在这种情况下,特定于平台的路径在Windows上也会失败。
"scripts": {
"foo": "../node_modules/.bin/foo-binary"
}
不能以sub
作为其依存关系有多个原因,其中一个原因是,所有子项目应始终使用相同的foo
版本,并且不占用空间。多份foo
副本。
在这种情况下,如何跨平台设置当前工作目录,最好不要在项目中添加自定义脚本?
答案 0 :(得分:1)
用JSON转义双引号(即\"...\"
)将npm-script中定义的路径括起来。
例如:
"scripts": {
"foo": "cd sub && \"../node_modules/.bin/foo-binary\""
}
现在,它将成功跨平台运行-通过Windows cmd.exe
和* nix sh
。