2

假设我在同一个目录中拥有所有foo.jsfoo.coffeefoo.json,并且我require './foo'从该位置的另一个(coffeescript)文件中说,什么规则控制将加载哪个文件?

一个简短的实验(使用require.resolve './foo')似乎表明 javascript 文件胜过其他两个文件。

确实,看起来require.extensions似乎 .js是作为第一项被提到的——但是,对象属性名称在 javascript 中本质上是无序的,对吗?所以添加到该属性的任何名称都可能重新排序条目——这可能会导致另一个解决顺序?

只是想知道,因为我找不到任何文档。当你这样做时它确实变得相关(也许你不应该)coffee --compile route/to/directory

4

2 回答 2

2

.js首先加载(这也意味着最好name.json对您的夹具使用 full 而不是name因为它可能被 遮蔽name.js

来自“模块”文档

如果未找到确切的文件名,则 node 将尝试加载所需的文件名,并添加扩展名为 .js、.json 和 .node。

此外,阅读伪代码中的名称解析算法:

LOAD_AS_FILE(X)
1.  If X is a file, load X as JavaScript text.  STOP
2.  If X.js is a file, load X.js as JavaScript text.  STOP
3.  If X.node is a file, load X.node as binary addon.  STOP

在 require.extensions 中设置的 (1,2,3) 扩展名之后,按照它们一组的顺序进行检查(对于 CoffeScript,require("coffe-script") 安装 .coffee处理程序)。

于 2013-05-08T07:09:15.733 回答
1

V8 中的行为是按照最初分配的顺序迭代命名属性,所以我希望.js永远是第一个。

这篇文章引用了这种行为

于 2013-05-08T02:14:47.797 回答