我想从存储库 B (都在本地克隆)中启动位于存储库 A 中的npm run
脚本。
在存储库 A 中,脚本在package.json
中定义如下:
"scripts": {
"my-script": "node my-script.js"
}
...它随npm run my-script
一起发布。以这种方式启动时没有错误,它工作正常。该脚本编译一些文件并将它们复制到repo A 中的不同文件夹。
所以,我首先想到能够从存储库 B 运行该过程只是从npm调用node my-script.js
。
"scripts": {
"my-script-in-other-repo": "node ../path/to/repo/my-script.js"
}
...并在存储库 B 中使用npm run my-script-in-other-repo
进行调用。
不幸的是,这种方法会抛出一堆Node和NPM错误,这些错误无助于解决这个问题。像Make sure you have the latest version of node.js and npm installed.
这样的东西。 Here is the output
我的直觉告诉我,Node上下文可能存在问题,或者存储库 B 中的Node无法访问存储库 A 中的dev包。
一个快速而肮脏的解决方案可能是在存储库中复制my-script.js
B 更改文件的路径并复制相同的依赖项......但它有点难看。
有没有更清洁的方法来解决这个问题?
答案 0 :(得分:2)
您似乎将项目 A 作为 B 的依赖项,并且您有 A 中的脚本要执行直接作为独立的应用程序。幸运的是,在npm中有一种无痛的方式来注册这些脚本并从家属运行它们。
在项目 A 中,使用"bin" property in package.json保留可执行脚本:
"bin": {
"A-script": "my-script.js"
},
在项目 B 中,将 A 保留为依赖项(或devDependency,具体取决于您何时需要),然后运行A-script
,就好像它是命令:
"scripts": {
"my-script-in-other-repo": "A-script"
}
但请注意,虽然从外部工作目录运行脚本时模块解析仍然有效,但使用fs
解析其他类型的资源取决于当前工作目录。根据{{3}}:
可以使用文件名的相对路径。但请记住,此路径将相对于
process.cwd()
。
如果您需要加载驻留在相对于源代码的某个位置的资源文件(例如css文件),请考虑使用docs regarding fs operations全局变量来解析该文件。这可能实际上是你问题的根源。