如何自动链接本地npm包?

时间:2013-12-10 16:32:26

标签: node.js npm

我正在建立两个相互依赖的私人npm包。

说我有:

project
  /my-commons
     package.json :
     {
       name : "my-commons",
       version : "0.0.1"
       ...
     }

  /my-server
     package.json :
     {
       dependencies : {
          "my-commons" : "0.0.1"
       }
     }

我可以使用'npm link'来安装'commons'包。所以任何人都愿意 开始在服务器上工作必须做:

  • 结帐项目
  • cd my-server
  • npm link ../ my-commons
  • npm install

在/ my-server / node_modules中添加了../my-commons的符号链接,一切都很好。

有没有办法告诉npm'my-commons'包总是在那个文件夹中,所以你可以这样做:

  • 结帐项目
  • cd my-server
  • npm install

或者我错过了一些明显的东西?

由于

1 个答案:

答案 0 :(得分:3)

可能。

但首先:如果my-commons需要my-server,那么将my-server/node_modules保留在npm link中是个好主意,即使这是多余的。在大多数情况下,最好将模块的依赖关系与应用程序的其余部分隔离开来。

在这种情况下,my-commons可以在开发期间使用,my-server当您想要使用npm publish my-commons中的更改而不必npm link时。

在生产中,您不希望使用my-server,因为相关模块将无法控制它们最终使用的链接模块版本。如果my-commons取决于npm link 0.1.0,但您my-commons编辑了my-server模块的1.0.1预发布版本,那么地狱可能会崩溃。

但是,自版本1.2.10(随节点0.8.19一起提供)NPM支持对等依赖项。 通过Peer依赖关系,您可以指定my-commons除“my-server之外还需要安装require("my-commons")”。这样可以让您my-servermy-server,但如果my-commons是{{1}}的插件,则可能会有用。 有关详细信息:http://blog.nodejs.org/2013/02/07/peer-dependencies/

最后,既然你说你正在开发私有软件包:如果安装软件包会给你带来麻烦,因为你无法将软件包发布到公共NPM注册表,看看指定依赖关系的替代方法(git-,http-URL,TGZ文件):https://docs.npmjs.com/files/package.json#dependencies