node.js - 是否有任何技术原因可以避免 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 以固定的方式导入模块。请参阅需要什么。这个“自我引用”在给定的 npm 包名下注册本地目录,但导出和文件与 node.js 相同。
这是非常规的。其他开发人员可能会迷失在这种结构中,或者忘记本地文件更改也会影响导入。我不知道会发生什么,但这很奇怪。
如果您打算将模块拆分为单独的 NPM 存储库(公共或私有)并以这种方式使用代码直到准备好,我可以看到好处。或者避免在安装时访问 NPM 网络。
此外,要非常小心该“内部仓库”中的文件如何引用其他文件。保持它包含在 NodeJS 中的导入顺序很重要,如果出现问题,这可能会变得一团糟。
推荐阅读
- kibana - 在 kibana docker image 和 rpm 中交付现成的仪表板
- java - Java try catch,在catch搜索期间程序跳过一行
- c# - OleDb 未实现
- sql-server - SQL Server - 通知 30,15, 7 天后
- performance - Spark:在大型数据集上测量 UDF 的性能
- python - 文本文件中的数据,如矩阵,带有字符串和数字。我想设置一个过滤器,通过python更改一些基于字符串的数字条件
- keras - “没有这样的文件或目录:”使用 Keras 加载图像时出错
- unreal-engine4 - 如何在保持玩家前进/后退能力的同时强制围绕空间点进行轨道运动?
- java - Java Regex 查找字符串是否包含 sql 注入字符
- php - PHP 警告:mysqli_query() 期望参数 1 为 mysqli,给定 null