2

i have a nodejs project with a few dependencies on my own modules. as per npm's current best practices, those dependencies are represented using the npm link/npm link $package-name commands, so the project now has some symbolic links in its node_modules. locally that works.

however when i push that project to github, the links are preserved as links, meaning that other people that clone it will (very likely) see broken links. another point is that i push the node_modules directory to github at all—that's ok in so far cloning from github now gives you a complete instance of the project with all dependencies resolved, but on the other hand i suddenly have a lot of 3rd party stuff in my repo.

what is the best practice to deal with this kind of situation?

edit one thing i just realized is that checking in dependencies as installed code is wrong anyhow—there might be some binaries involved that need to get installed in a platform-specific way. so you never check in your dependencies?

4

2 回答 2

2

首先,不要在你的 git 项目中包含其他节点模块

cd ~/your_module && echo "/node_modules" >> .gitignore

其次,如果您的模块有依赖项,只需在package.json. 这是我的burro模块中的一个示例

// package.json
{
  // ...
  "devDependencies": {
    "mocha": "~1.8.1",
    "hiccup": "~0.1.4"
  },
  "dependencies": {
    "bun": "~0.0.5"
  }
}

对于它的价值,我实际上并没有使用该npm link功能。我分别构建/测试我的所有模块。如果您想要其他示例,可以在我的 github存储库中看到其中的一些。

我的基本工作流程是这样的:

  1. 补丁模块A
  2. 模块 A 上的凹凸版本
  3. npm publish模块 A
  4. 模块 B 中模块 A 的碰撞版本依赖
  5. 在模块 B 中重新npm install模块 A
  6. 修补模块 B 以使用新版本的模块 A(如果需要)
  7. 模块 B 上的凹凸版本
  8. npm publish模块 B

npm link很方便,但我认为它启用/鼓励模块之间的耦合过于紧密。我坚信“做一件事并做好”的口头禅,并在创作我的所有模块时牢记这一点。使用此工作流程将有助于保持您的功能得到良好封装,并且社区会喜欢您的版本。


至于github位,npm真的不在乎这个。作为一个习惯,在我npm publish发布之前,我总是用模块版本标记那个提交。这是一个例子

  1. 将版本设置为“0.1.5”package.json
  2. git commit -m "bump to version 0.1.5"
  3. git tag v0.1.5
  4. git push origin master --tags
  5. npm publish

现在 npmjs.org 和 github.com 都同意同一个版本。从任一来源下载您的软件包的用户将始终得到相同的结果。

于 2013-04-27T08:16:16.630 回答
2

不要node_modules在源存储库中包含该目录。Git 用于源代码,而不是构建发行版。这是几十年来的最佳实践。忽略你偶尔看到的将构建工件放入 git 的时髦人士。他们错了,他们只是还没有感受到足够的痛苦来意识到这一点。除了从合理的方法论角度来看是不正确的之外,当(不是如果)您的项目包含具有按平台编译的 C 组件的任何扩展时,在 git 中包含您的 node_modules 也会失败。这将失败,至少需要npm rebuild克隆 repo 的用户来修复它,此时您不妨让他们npm install$Deity预期进行操作。

于 2013-04-26T21:46:49.920 回答