我正在建立两个相互依赖的私人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'包。所以任何人都愿意 开始在服务器上工作必须做:
在/ my-server / node_modules中添加了../my-commons的符号链接,一切都很好。
有没有办法告诉npm'my-commons'包总是在那个文件夹中,所以你可以这样做:
或者我错过了一些明显的东西?
由于
答案 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-server
内my-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