【问题标题】:Using NODE_PATH with Git submodules将 NODE_PATH 与 Git 子模块一起使用
【发布时间】:2014-02-24 18:47:51
【问题描述】:

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

向 NODE_PATH 添加必需路径是否被认为是一种不好的做法?

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

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

但是有一个小问题。 Node 的文档有 the following statement 关于向 NODE_PATH 添加需要路径:

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

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

【问题讨论】:

    标签: node.js git git-submodules node-modules


    【解决方案1】:

    我不建议将路径添加到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 子模块,你可能会把事情搞得一团糟。在实际推送子模块之前,您可以(意外地)使用对子模块的引用推送外部模块,并且没有其他人能够工作,因为他们不会有那些仅在您的机器中的提交)。 还有submodules are always checked out in detached HEAD mode,还有a few more issue regarding branching and merging

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

    node_modules/models.js

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

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

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

    node_modules/*
    !node_modules/models.js
    

    您可能希望将其添加到 package.json 中的 bundledDendencies。是的,这有点乱,但你会避免相对路径,并且能够移动文件夹,把事情弄得一团糟(太多了)。

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

    【讨论】:

    • 我浏览了一些我的旧问题并意识到我从未将您的答案标记为已接受,即使我最终根据您的建议将这些资产单独打包。所以谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-07-15
      • 2019-04-06
      • 2013-08-08
      • 2019-06-17
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 2015-12-06
      • 2016-10-09
      相关资源
      最近更新 更多