node.js - node.js如何管理两个第三方包
问题描述
我正在编写一个 node.js 应用程序。此应用程序依赖于另一个包,假设 AAA.. 所以在 package.json 的“依赖项”中应该包含它(在 AAA 之上)
我的问题是:我想检查用户是否安装了 AAA 并使用它,否则使用我的应用程序安装的 AAA。
伪语言:</p>
import AAA as myAAA from 'AAA';
let fallback
if (user has been installed AAA){
fallback = AAA;
} else {
fallback = myAAA;
}
我可以这样做吗?
解决方案
简而言之,不,您尝试做的事情不能以简单的方式完成。Node.js 尝试定位按名称引用的模块的顺序如下:
- 检查给定的模块是否是核心模块。
- 在当前目录(项目目录)中搜索名为 node_modules 的目录。
- 沿着文件夹层次结构向上工作,检查 node_modules 文件夹的每个级别。
- 查看 node.js 中 require.paths 数组中列出的目录路径。
你不能让 Node.JS 改变这个查找的顺序——这就是你想要做的。
可以有其他方法来实现这一点 - 例如,查找全局 node_modules 安装位置并查看包是否在该文件夹中 - 如果是,您可以require()
使用全局包的绝对路径,如果不是,您可以require()
将包作为通常,将使用本地包。
参考:
http://www.bennadel.com/blog/2169-where-does-node-js-and-require-look-for-modules.htm
推荐阅读
- neo4j - 在 Neo4j 中存储元数据的有效方法
- nativescript - 如何在组件 nativescript 中显示来自函数的数据?
- javascript - 如何遍历 Puppeteer 创建的屏幕截图图像的像素颜色并绘制矩形并保存到文件
- hive - 将配置单元表作为单个文件输出到 HDFS
- java - gradle mutlimodule 项目中使用 Jacoco 离线检测的跨模块代码覆盖率
- swift - 在 SwiftUI 中为 TotalValue 添加列表值
- rest - Google Firestore - 通过 Postman 进行 REST 读/写
- php - 为 AWS RDS MySQL 启用 TLS 证书验证
- angularjs - 如何将 angularjs 指令和 angular 组件组装在一起?
- html - react.js (gatsby.js) 的模板引擎