Node.js 是否有任何技术原因可以避免npm中的自依本地依赖关系(文件引用)?
我希望对Node.js包(自引用)使用本地导入路径,就像对其他本地包(而不是相对路径)使用本地导入路径一样。下面是一个Node.js 是否有任何技术原因可以避免npm中的自依本地依赖关系(文件引用)?,node.js,npm,relative-path,Node.js,Npm,Relative Path,我希望对Node.js包(自引用)使用本地导入路径,就像对其他本地包(而不是相对路径)使用本地导入路径一样。下面是一个包.json的示例: { "name": "@somecompany/testproject", "dependencies": { "@somecompany/_self": "file:.", "@somecompany/utils"
包.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安装
,使用节点运行它
)而言,它似乎确实可以工作(Linux,npm@7, node@14)
使用这种模式的原因是在包括当前包在内的所有包中都有一个一致的导入路径策略(避免相对路径)。我不喜欢使用webpack或babel等方式对导入路径进行后处理。我看到过类似的模式,对当前包使用无效的包名
@
,以避免相对文件路径。但这需要后处理。节点以固定方式导入模块。看见此“自引用”在给定的npm包名称下注册本地目录,但导出和文件与节点相同
这是非传统的。其他开发人员可能会在这种结构中迷失方向,或者忘记本地文件更改也会影响导入。我不知道什么会坏,但这很奇怪
如果您计划将一个模块拆分为一个单独的NPM回购协议(公共或私有),并以这种方式使用代码,直到准备就绪,我会看到好处。或者在安装时避免网络访问NPM
另外,要非常小心“内部回购”中的文件如何引用其他文件。控制它-导入顺序在NodeJS中很重要,如果出现问题,这可能会是一个混乱的局面