nodeJS require.paths 解决问题

发布于 2024-10-26 07:04:35 字数 641 浏览 1 评论 0原文

我试图相对而神秘地要求一个文件,以下情况正在发生

这效果很好,指向 /Users/marcos/Desktop/Taper/lib/utils.js

myPath = "/Users/marcos/Desktop/Taper/lib/./utils";
require(myPath);

这不是,但它应该指向完全相同的文件:

require.paths.unshift("/Users/marcos/Desktop/Taper/lib")
require("./utils"); //Doesn't work with './'
require("utils"); //Works Fine

任何人都知道为什么在这种情况下我仍然不能使用 ./ 来加载路径,因为

require("path").resolve("/Users/marcos/Desktop/Taper/lib", "./utils")

结果是:

"/Users/marcos/Desktop/Taper/lib/utils"

无论如何?

提前致谢

I am trying to require a file relatively and mysteriously the following is happening

This works well which points to /Users/marcos/Desktop/Taper/lib/utils.js

myPath = "/Users/marcos/Desktop/Taper/lib/./utils";
require(myPath);

This doesn't but it should point to exactly the same file:

require.paths.unshift("/Users/marcos/Desktop/Taper/lib")
require("./utils"); //Doesn't work with './'
require("utils"); //Works Fine

Anyone knows why I can't still use ./ in this case for loading the path since

require("path").resolve("/Users/marcos/Desktop/Taper/lib", "./utils")

results in:

"/Users/marcos/Desktop/Taper/lib/utils"

anyway?

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谁许谁一生繁华 2024-11-02 07:04:35

更新:

来自文档

'/'为前缀的模块是文件的绝对路径。为了
例如, require('/home/marco/foo.js') 将加载文件
/home/marco/foo.js

'./'为前缀的模块与调用require()的文件相关。
也就是说,circle.js 必须与 foo.js 位于同一目录中
require('./circle') 来找到它。

如果没有前导“/”或“./”来指示文件,则该模块可以是
“核心模块”或从 node_modules 文件夹加载。

如果给定的路径不存在,require()将抛出一个错误
code 属性设置为 'MODULE_NOT_FOUND'


这是原始答案,引用 require.paths (不再支持):

来自 文档

在节点中,require.paths 是一个字符串数组,表示模块搜索时的路径不以 '/''./''../'. 为前缀

(强调我的)

UPDATED:

From the documentation:

A module prefixed with '/' is an absolute path to the file. For
example, require('/home/marco/foo.js') will load the file at
/home/marco/foo.js.

A module prefixed with './' is relative to the file calling require().
That is, circle.js must be in the same directory as foo.js for
require('./circle') to find it.

Without a leading '/' or './' to indicate a file, the module is either
a "core module" or is loaded from a node_modules folder.

If the given path does not exist, require() will throw an Error with
its code property set to 'MODULE_NOT_FOUND'.


Here’s the original answer, which refers to require.paths (which is no longer supported):

From the documentation:

In node, require.paths is an array of strings that represent paths to be searched for modules when they are not prefixed with '/', './', or '../'.

(emphasis mine)

吃素的狼 2024-11-02 07:04:35

您可以使用 NODE_PATH 传递该

示例:

NODE_PATH=`pwd` node app.js

You can pass that using NODE_PATH

Example:

NODE_PATH=`pwd` node app.js
冰葑 2024-11-02 07:04:35

我创建了一个名为rekuire的新节点模块。

它允许您在不使用相对路径的情况下“要求”。

在测试/重构方面,这可以节省大量时间。

https://npmjs.org/package/rekuire

I created a new node module called rekuire.

It allows you to "require" without using relative paths.

It's a big time saver when it comes to testing/refactoring.

https://npmjs.org/package/rekuire

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文