【问题标题】:How to look for a specific folder with require in node js如何在节点 js 中使用 require 查找特定文件夹
【发布时间】:2019-12-16 08:10:38
【问题描述】:

我需要 require() 方法来从 node_modules 文件夹以外的文件夹加载模块。有没有办法在不使用任何 npm 库的情况下做到这一点。

EX- modules 文件夹内有一个 age 文件夹,其中包含一个 index.js 文件。我需要像

一样导入那个模块
const age = require('age')

没有给出模块的相对路径。

【问题讨论】:

  • 请向我们展示您尝试从中加载的确切文件夹结构。否则,请参阅文档 nodejs.org/api/… 了解 node.js 将从没有路径的情况下加载的其他位置。
  • 我的回答是首先不要为自己制造这个问题。将模块放置在预期的node_modules 位置、预期的全局位置或使用路径指示从何处加载它。
  • 您对require() 工作原理的回答全部在我给您的文档参考中。如果您只想require('age') 找到它,我认为您必须将其路径放入NODE_PATH 或替换/挂钩require() 以赋予它新的行为。根据文档,我没有看到任何其他方式。我会争辩说,当您遇到此问题时,您在设计中做错了什么。这不是 node.js 的运行方式,您正试图以某种方式对其进行颠覆。

标签: node.js


【解决方案1】:

有没有办法在不使用任何 npm 库的情况下做到这一点。

这类事情的答案总是“是”,因为这些库是用 JavaScript 编写的。

我强烈建议不要使用它并使用标准方法(例如使用 yarn 工作区并将 age 声明为适当的本地 npm 模块),但您始终可以执行诸如 require 钩子之类的操作:

const originalRequire = Module.prototype.require;
Module.prototype.require = function moduleRequire(id) {
  if(id === 'age') {
    return require('./modules/age');
  }
  return originalRequire.call(this, id);
}

或者将您的本地 modules 文件夹添加到 NODE_PATH 环境变量,以便它在那里找到它。

这两个都不是好选择,我建议不要使用这两个

最好坚持标准的作案手法和供应商,并使用“适当的”npm 模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    相关资源
    最近更新 更多