假设我在同一目录中拥有所有foo.js
,foo.coffee
和foo.json
,并且我在该位置的另一个(coffeescript)文件中说require './foo'
,规则管理哪一个将被加载?
一个简短的实验(使用require.resolve './foo'
)似乎表明javascript文件胜过其他两个。
确实,看require.extensions
它看起来像 .js
在那里作为第一项被提及 - 但是,对象属性名称在javascript中本质上是无序的,对吗?所以添加到该属性的任何名称都可能重新排序条目 - 这可能导致另一个解决方案订单吗?
只是想知道,因为我找不到任何文件。当你做(也许你不应该)coffee --compile route/to/directory
时,它确实变得相关。
答案 0 :(得分:2)
.js
(这也意味着最好使用完整的name.json
代替name
而不是name.js
,因为它可能被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
遮蔽了1} p>
来自“模块”documentation:
如果找不到确切的文件名,那么node将尝试使用添加的.js,.json和.node扩展名加载所需的文件名。
另外,在pseudo-code中读取名称解析算法:
require("coffe-script")
在require.extensions中设置的(1,2,3)扩展按照它们的集合顺序进行检查(对于CoffeScript,.coffee
installs {{1}}处理程序。)
答案 1 :(得分:1)
V8中的行为是按照最初分配的顺序迭代命名属性,因此我希望.js
始终是第一个。