首页 > 解决方案 > 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.js 尝试定位按名称引用的模块的顺序如下:

  1. 检查给定的模块是否是核心模块。
  2. 在当前目录(项目目录)中搜索名为 node_modules 的目录。
  3. 沿着文件夹层次结构向上工作,检查 node_modules 文件夹的每个级别。
  4. 查看 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


推荐阅读