为运行二进制文件的 NPM 脚本设置 CWD
Set CWD for NPM script that runs a binary
我有一个托管子项目并包含公共依赖项的超级项目:
super
node_modules
.bin
foo-binary
foo-binary.exe
foo
sub
node_modules
package.json
package.json
我需要能够调用 foo
作为 super
NPM 脚本:
super/package.json
"scripts": {
"foo": "foo-binary" <-- should run with super/sub/ as CWD
}
在这种情况下 foo-binary
运行s 与 super/
作为 CWD,而它应该 运行 与 super/sub/
。使用cd
会导致跨平台问题;带反斜杠的 cd sub && ..\node_modules\.bin\foo-binary
适用于 Windows 但不适用于 *nix 操作系统,而带正斜杠的 cd sub && ../node_modules/.bin/foo-binary
在 Windows 上失败(在 Windows 7 上测试):
".." is not recognized as an internal or external command, operable program or batch file
或者我需要能够调用 foo
作为 super
NPM 脚本:
super/sub/package.json
"scripts": {
"foo": "../node_modules/.bin/foo-binary"
}
在这种情况下,特定于平台的路径在 Windows 上也会失败。
sub
不能将foo
作为自己的依赖有几个原因,其中之一是所有子项目应该始终使用相同的foo
版本并且不占用space 有多个 foo
副本。
在这种情况下如何设置当前工作目录,跨平台并且最好不向项目添加自定义脚本?
用 JSON 转义双引号将 npm 脚本中定义的路径括起来,即 \"...\"
.
例如:
"scripts": {
"foo": "cd sub && \"../node_modules/.bin/foo-binary\""
}
这将 运行 成功跨平台 - 通过 windows cmd.exe
和 *nix sh
.
我有一个托管子项目并包含公共依赖项的超级项目:
super
node_modules
.bin
foo-binary
foo-binary.exe
foo
sub
node_modules
package.json
package.json
我需要能够调用 foo
作为 super
NPM 脚本:
super/package.json
"scripts": {
"foo": "foo-binary" <-- should run with super/sub/ as CWD
}
在这种情况下 foo-binary
运行s 与 super/
作为 CWD,而它应该 运行 与 super/sub/
。使用cd
会导致跨平台问题;带反斜杠的 cd sub && ..\node_modules\.bin\foo-binary
适用于 Windows 但不适用于 *nix 操作系统,而带正斜杠的 cd sub && ../node_modules/.bin/foo-binary
在 Windows 上失败(在 Windows 7 上测试):
".." is not recognized as an internal or external command, operable program or batch file
或者我需要能够调用 foo
作为 super
NPM 脚本:
super/sub/package.json
"scripts": {
"foo": "../node_modules/.bin/foo-binary"
}
在这种情况下,特定于平台的路径在 Windows 上也会失败。
sub
不能将foo
作为自己的依赖有几个原因,其中之一是所有子项目应该始终使用相同的foo
版本并且不占用space 有多个 foo
副本。
在这种情况下如何设置当前工作目录,跨平台并且最好不向项目添加自定义脚本?
用 JSON 转义双引号将 npm 脚本中定义的路径括起来,即 \"...\"
.
例如:
"scripts": {
"foo": "cd sub && \"../node_modules/.bin/foo-binary\""
}
这将 运行 成功跨平台 - 通过 windows cmd.exe
和 *nix sh
.