网站搜索

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 编译器抛出漂亮的错误信息。