0

我昨天问了这个关于在 Node 应用程序之间共享代码的问题,没有答案,所以现在我有一个更具体的问题,而不是冗长的问题。

将要求路径添加到 NODE_PATH 是否被认为是一种不好的做法?

正如我在上一个问题中提到的,我正在努力寻找一种在两个节点应用程序之间共享公共资产的方法,而我能想出的唯一明智的解决方案是使用 git 子模块。我会将这个包含常见资产(例如 Mongoose 模式)的子模块放置到两个应用程序的根目录,在必要时更新文件,然后将其推送到另一个应用程序。这是一个非常简单的过程,与应用程序自己的文件没有严重的合并问题,就像我在最初的问题中想到的第三个解决方案一样。

这种结构的美妙之处在于,我可以只通过将子模块路径添加到 Node 的 require 路径来获取这些公共folder/file.js资产submodule/folder/file.js。这也意味着我可以通过将子模块路径进一步放在路径堆栈上,用应用程序自己的相应文件(如果它们存在)覆盖子模块的公共文件,这样如果找到本地文件,节点将需要它而不是子模块的等价物。

但是有一个小问题。Node 的文档有以下关于向 NODE_PATH 添加需要路径的声明:

强烈建议您将依赖项本地放置在 node_modules 文件夹中。它们将被更快、更可靠地加载。

所以基本上这意味着它被认为是一种不好的做法并且会减慢应用程序的速度,这是我真的不想要的。还是这只适用于全局路径,所以子模块(位于应用程序的根目录中)不会有问题?

4

2 回答 2

2

我不建议将路径添加到NODE_PATH.

在您的package.json中,您可以将模块直接链接到存储库 url:

"dependencies": {
  "myModels": "git+https://user:pass@github.com/myAccount/my-models.git#v0.6"
  "myTemplates": "git+ssh://github.com/myAccount/my-templates.git#v0.2"
}

如您所见,您可以引用标签、分支或任何您想要的。您可以为每个应用程序使用不同的版本。只需更新您的标签、分支和npm install.

恕我直言,我不会使用git 子模块,你可能会把事情搞得一团糟。在实际推送子模块之前,您可以(意外地)使用对子模块的引用推送外部模块,并且没有其他人能够工作,因为他们不会有那些仅在您的机器中的提交)。此外,子模块始终以分离的 HEAD 模式签出,并且还有一些关于分支和合并的问题

如果我的论点不足以让您不使用子模块并且您继续,NODE_PATH那么您可以将代理文件添加到您的 node_modules 以避免相对路径,而不是更新:

node_modules/models.js

module.exports = require('../lib/models');

这可能不是最好的做法,但您将在整个应用程序中避免该模块的相对路径。

如果您在.gitignore下有node_modules ,则必须省略这个文件:

node_modules/*
!node_modules/models.js

您可能希望将其添加到bundledDendenciespackage.json。是的,这有点乱,但你会避免相对路径,并且能够移动文件夹而把事情搞砸(太多)。

长话短说:将您的业务依赖项添加到package.json可能是您想要的。

于 2014-01-31T23:40:28.990 回答
0

所以基本上这意味着它被认为是一种不好的做法并减慢了应用程序的速度

是的,这被认为是一种不好的做法。它有时很有用,但你最好有一个很好的理由。

不,它不会减慢应用程序的速度。

于 2014-01-31T23:13:54.253 回答