Node.js上的依赖版本冲突问题

6
我是新手,想了解如何处理依赖版本冲突(通常出现在传递依赖项中)的问题。我在互联网上只找到了这篇文章对我有用:http://nodejs.org/api/modules.html#modules_addenda_package_manager_tips
所以似乎我不必担心冲突,因为在node.js中管理包的方式。我错了吗?我漏掉了什么吗?对我来说,这似乎很奇怪(但仍然有意义),我习惯于使用maven处理依赖项,设置不需要下载的传递依赖项。
非常感谢您的帮助。
1个回答

6

npm和Node.js的require系统会自动处理这个问题。例如,您的程序可以依赖于dep1dep2,其中dep1可以要求subdep版本1.0,而dep2可以要求subdep版本2.0,npm将安装多个版本,因此每个模块都能获得其所需的依赖版本。

your-module/
    node_modules/
        dep1/
            node_modules/
                subdep/ (1.0)
        dep2/
            node_modules/
                sudbep/ (2.0)

2
非常感谢:我主要是在寻找官方参考,然后确认我的想法是否正确。通过您提供的链接,我发现了有趣的部分“为什么npm不能像其他软件包管理器一样把所有东西都放在一个地方?” 这又指向了https://npmjs.org/doc/folders.html。特别是,在文件夹文档中,我在“循环,冲突和文件夹节俭”的“示例”部分中找到了答案。 - reallynice
有没有一种方法来禁止这种行为?所以如果有冲突,就使用最低的数字。 - Daniel
2
不,没有这样的。因为这很可能在运行时崩溃。如果depA需要subdepFoo@2.0.0,而depB需要subdepFoo@1.5.0,而npm只安装了subdefFoo@1.5.0,depA将尝试使用新的2.0.0 API,但这些API并不存在,程序将会抛出异常并崩溃。 - Peter Lyons
如果我有另外5个依赖项dep3到dep8,依赖于subdep 2.0,那么它会在每个依赖项的node_modules中复制相同的subdep 2.0吗?结果总共会有6个副本吗? - Jaydip Kalkani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接