gpt4 book ai didi

javascript - Node.js 需要一个相对于包根目录的文件

转载 作者:行者123 更新时间:2023-12-03 23:39:56 25 4
gpt4 key购买 nike

在 Node.js 中,有没有办法在不使用相对路径的情况下要求来自同一个包的文件?例如,这是来自 ESLint 的代码片段.

const rule = require("../../../lib/rules/accessor-pairs"),
{ RuleTester } = require("../../../lib/rule-tester");
事实上,我们必须一直走到树上 ../../../追根究底不仅烦人。它也很脆弱,因为我无法在不更新所有依赖项引用的情况下移动代码。
然而不知何故,Node.js 开发人员似乎在过去的 10 年里一直在忍受它。除了名为 require-self 的第三方依赖项之外,我在文档或 Stack Overflow 中找不到任何解决此问题的内容。 .我也无法找到一个明确的声明,即使用相对路径是文件在同一模块中需要另一个文件的唯一非 hacky 方式。
如果有一种方法可以在 ECMAScript 模块(ESM)中指定相对于包根目录的路径,但不能在 CommonJS(CJS)中指定路径,反之亦然,我也想知道这一点。
需要明确的是,我认为没有解决问题的方法。如果有大。否则,我正在寻找权威引用的确认。

最佳答案

不一定是同一个包 - 如果您正在编写库,这将没有用,但如果您正在编写“最终应用程序” - 实际运行的东西:
一种选择:

If the NODE_PATH environment variable is set to a colon-delimited list of absolute paths, then Node.js will search those paths for modules if they are not found elsewhere.


因此,您可以执行以下任何操作:
1.
export NODE_PATH=.
node app.js
  • NODE_PATH=. node app.js
  • // app.js (or whatever your entry point is) before *any* require() calls
    process.env.NODE_PATH = __dirname;
    require('module').Module._initPaths();
    或者,另一种方式:

    The Module object representing the entry script loaded when the Node.js process launched.


    https://nodejs.org/api/modules.html#modules_require_main
    所以你可以这样做:
    const rule = require.main.require("./lib/rules/accessor-pairs")
    任何时候您希望它与根相关(假设您的项目结构是这样的)。

    关于javascript - Node.js 需要一个相对于包根目录的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66423165/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com