Node app和多个node模块同时开发,npm-link的使用

Posted

技术标签:

【中文标题】Node app和多个node模块同时开发,npm-link的使用【英文标题】:Node app and multiple node modules being developed concurrently, usage of npm-link 【发布时间】:2013-09-22 10:15:41 【问题描述】:

我正在构建一个 node.js 应用程序并同时开发应用程序所需的模块。一些模块具有 peerDependencies,我正在努力弄清楚如何最好地构建我的开发环境。

到目前为止我所拥有的:

/node-projects
|--/myApp
|----/node_modules
|------/symlink to module1
|------/symlink to module2
|
|--/module1
|
|--/module2

我使用npm link 在我的应用程序的 node_modules 中创建一个符号链接到我的项目根目录中的模块。这让我可以轻松地 git push/pull 各个模块以及我的应用程序。

但是,如果 module2 将 module1 指定为 peerDependency,我的应用程序将无法启动,从而给出 module2 找不到 module1 的错误。我认为这是因为它们实际上不在一个 node_modules 目录中。

我是否遗漏了一个难题,它可以让模块 2 的符号链接识别模块 1 的符号链接?还是我目前正在尝试通过 npm 完成的工作是不可能的?是否有更好的策略来保持我的自定义模块与 git/github 同步,同时在我的主应用程序中也需要它们?

【问题讨论】:

同样的问题!我希望尽快试用npm-workspace 【参考方案1】:

在做了更多的研究之后,我似乎目前仅使用 npm link 无法完成我想要完成的工作,而且似乎没有一个简单的答案来设置仅使用 npm 的这种工作流.

阅读 npm 的 github 存储库上的 this issue,我可以看到其他人也遇到了同样的挫败感,但没有给出可能的解决方案。

我还遇到了模块npm-workspace,它似乎完全可以解决我的问题,尽管我还没有尝试过。

另一种可能性是使用Git submodules。然而,在阅读有关 git 子模块的信息时,我看到很多抱怨它们很难正确设置,而且意外地将子模块包含在主 git 存储库中似乎非常容易。

在我有机会测试 npm-workspace 之前,我会等待接受自己的答案,与此同时,也许有人会提出更好的解决方案。

【讨论】:

npm-workspace 是专门为解决您在此处描述的问题而创建的,现在它还可以用于打包您的工作区以进行部署(复制包而不是链接)。这不是完美的解决方案,但我希望它会让您的 npm 体验更加顺畅。 (免责声明:我是 npm-workspace 的创建者) 对不起@Mario,但不幸的是 npm-workspace 在更新模块的下游依赖项方面存在缺陷。 npm-workspace 的复制功能非常适合解决与 npm 链接相关的问题,但是如果我想在上游依赖项上独立开发使用 npm-shrinkwrap 的下游依赖项,我必须完成一系列手动步骤更新所有下游依赖项。我们需要某种依赖更新汇总。

以上是关于Node app和多个node模块同时开发,npm-link的使用的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 模块以及npm包的管理和使用

npm run dev执行一条命令启动多个node服务

Node.js服务器开发

如何在 node.js 中卸载具有开发依赖项的 npm 模块?

node自定义安装更改npm全局模块默认安装路径

npm与包 丨Node.js模块化