gpt4 book ai didi

node.js - 从不同的存储库运行 npm 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:18 25 4
gpt4 key购买 nike

我想从存储库 B(均在本地克隆)启动位于存储库 A 中的 npm run 脚本。

在存储库A中,脚本在package.json中定义如下:

"scripts": {
"my-script": "node my-script.js"
}

...它是通过 npm run my-script 启动的。当以这种方式启动时,它工作正常,没有错误。该脚本编译一些文件并将它们复制到存储库 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 错误,这些错误对解决这个问题没有任何帮助。像确保您安装了最新版本的node.js和npm。Here is the output .

我的直觉告诉我,这可能是 Node 上下文的问题,或者存储库 B 中的 Node 无法访问存储库 A 中的开发包。

一个快速而肮脏的解决方案可能是在存储库B中复制my-script.js,更改文件的路径并复制相同的依赖项......但它有点难看。

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

最佳答案

您似乎将项目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 解析其他类型的资源取决于当前工作目录。根据docs regarding fs operations :

The relative path to a filename can be used. Remember, however, that this path will be relative to process.cwd().

如果您需要加载位于与源代码相关的某个位置的资源文件(例如 css 文件),请考虑使用 __dirname全局变量以便解析该文件。这实际上可能是您问题的根源。

关于node.js - 从不同的存储库运行 npm 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37309807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com