首页 > 解决方案 > 是否有任何技术原因可以避免 npm 中的自依赖本地依赖(文件引用)?

问题描述

我想为我的 Node.js 包(自引用)使用本地导入路径,就像我对其他本地包使用本地导入路径(而不是相对路径)一样。这是一个示例package.json

{
  "name": "@somecompany/testproject",
  "dependencies": {
    "@somecompany/_self": "file:.",
    "@somecompany/utils": "file:../utils"
  }
}

安装包后,我可以这样,如果test.js在同一个包中有一个:

import { randomize } from "@somecompany/utils/random.util";
import { test } from "@somecompany/_self/test";

该解决方案是否存在任何技术缺陷,因为它显然引入了循环依赖?是否存在性能问题(我假设每个解决方案都必须首先解决符号链接)?它是反模式吗?是否有任何其他原因可以避免这种模式(例如依赖于操作系统的问题)?

据我测试(npm install,运行它node)它似乎工作(Linux,npm@7,node@14)。

使用这种模式的原因是在所有包(包括当前包)中具有一致的导入路径策略(避免相对路径)。我不喜欢使用 webpack 或 babel 对导入路径进行后处理。我已经看到了类似的模式,使用@当前包的无效包名来避免相对文件路径。但这需要后期处理。

标签: node.jsnpmrelative-path

解决方案


Node 以固定的方式导入模块。请参阅需要什么。这个“自我引用”在给定的 npm 包名下注册本地目录,但导出和文件与 node.js 相同。

这是非常规的。其他开发人员可能会迷失在这种结构中,或者忘记本地文件更改也会影响导入。我不知道会发生什么,但这很奇怪。

如果您打算将模块拆分为单独的 NPM 存储库(公共或私有)并以这种方式使用代码直到准备好,我可以看到好处。或者避免在安装时访问 NPM 网络。

此外,要非常小心该“内部仓库”中的文件如何引用其他文件。保持它包含在 NodeJS 中的导入顺序很重要,如果出现问题,这可能会变得一团糟。


推荐阅读