npm - npm5 本地模块安装可能导致 Typescript 重复标识符错误
直到 npm5,从本地文件系统安装的包(npm install ./packages/subdir)会将本地模块复制到目标的 node_modules 中。
在 v5 中,本地安装仅创建一个符号链接,而不复制模块。
不幸的是,如果你的主模块和你从本地文件夹安装的模块有相同的依赖,这种行为会破坏 npm3 引入的扁平模块结构。
让我用一个例子来说明问题:
我有三个模块参与,其中两个是本地的(/home/gsanta/moduleA, /home/gsanta/moduleB),一个来自 npm 仓库(例如:jquery)。
moduleA 依赖于 moduleB 和 jquery。moduleB 依赖于 jquery。
现在我将 moduleB 安装到 moduleA 中
cd /home/gsanta/moduleA
npm install ../moduleB
使用 npm4 或更早版本时,我得到以下干净的依赖树:
moduleA
moduleB
jquery
在 npm5 中,它看起来更像这样(因为 moduleB 只是链接到 moduleA,而不是复制过去的):
moduleA
moduleB
jquery
jquery
我不知道这种行为会有什么样的影响,但对于 TypeScript 来说,这显然是有问题的,因为在这种情况下,如果 jQuery 包含一些 TypeScript 声明文件,这些声明将会重复,从而导致 TypeScript 编译器抛出漂亮的错误信息。