从不同的存储库

时间:2016-05-18 20:45:06

标签: node.js npm

我想从存储库 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 更改文件的路径并复制相同的依赖项......但它有点难看。

有没有更清洁的方法来解决这个问题?

1 个答案:

答案 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全局变量来解析该文件。这可能实际上是你问题的根源。