为运行二进制文件的NPM脚本设置CWD
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为运行二进制文件的NPM脚本设置CWD相关的知识,希望对你有一定的参考价值。
我有一个托管子项目并包含公共依赖项的超级项目:
super
node_modules
.bin
foo-binary
foo-binary.exe
foo
sub
node_modules
package.json
package.json
我需要能够将foo
称为super
NPM脚本:
超/的package.json
"scripts": {
"foo": "foo-binary" <-- should run with super/sub/ as CWD
}
在这种情况下,foo-binary
以super/
作为CWD运行,而它应该与super/sub/
一起运行。使用cd
会导致跨平台问题;带有反斜杠的cd sub && ..\node_modules\.bin\foo-binary
适用于Windows但不适用于* nix操作系统,而带有正斜杠的cd sub && ../node_modules/.bin/foo-binary
在Windows上失败(在Windows 7上测试):
“..”不被识别为内部或外部命令,可操作程序或批处理文件
或者我需要能够将foo
称为super
NPM脚本:
超/子/的package.json
"scripts": {
"foo": "../node_modules/.bin/foo-binary"
}
在这种情况下,特定于平台的路径也会在Windows上失败。
有几个原因导致sub
不能将foo
作为自己的依赖,其中一个原因是所有子项目应该始终使用相同的foo
版本而不占用多个foo
副本的空间。
在这种情况下,如何设置当前工作目录,跨平台,最好不要在项目中添加自定义脚本?
使用JSON转义双引号(即"..."
)封闭npm脚本中定义的路径。
例如:
"scripts": {
"foo": "cd sub && "../node_modules/.bin/foo-binary""
}
现在,这将通过windows cmd.exe
和* nix sh
成功跨平台运行。
以上是关于为运行二进制文件的NPM脚本设置CWD的主要内容,如果未能解决你的问题,请参考以下文章
node中__dirname__filenameprocess.cwd()process.chdir()表示的路径