使用nodejsparsing的顺序需要模块
假设我把foo.js
, foo.coffee
和foo.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
处理程序。