使用nodejsparsing的顺序需要模块

假设我把foo.jsfoo.coffeefoo.json放在同一个目录下,并且我require './foo'从那个位置的另一个(coffeescript)文件中得到require './foo' ,那么哪个规则pipe理哪一个会被加载呢?

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

事实上,看着require.extensions看起来像 .js在那里被作为第一个项目提到 – 但是,然后,对象属性名称本质上是无序的在javascript中,所以任何名称添加到该属性可能会重新sorting条目 -那可以导致另一个解决令?

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

V8中的行为是按照它们最初分配的顺序遍历命名的属性,所以我期望.js始终是第一个。

这篇文章引用了这个行为

.js首先被加载(这也意味着最好使用full name.json来代替name因为它可能被name.js所遮蔽)

从“模块” 文档 :

如果没有find确切的文件名,那么节点将尝试加载所需的文件名,扩展名为.js,.json,然后是.node。

另外,在伪代码中读取名称parsingalgorithm:

 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处理程序。