我在React(coffee jsx)中有以下组件定义:
CompUtils = require './../utils/comp-utils'
...
render: ->
console.log CompUtils # prints {} (empty object)
<div>
Then
{CompUtils.getConstructComponent @props.construct, @props.onUpdate, @props.onRemove}
</div>
但这有效:
render: ->
console.log require('./../utils/comp-utils')
<div>
Then
{require('./../utils/comp-utils').getConstructComponent @props.construct, @props.onUpdate, @props.onRemove}
</div>
我对此绝对感到困惑。请注意,CompUtils
已在其他组件中成功使用。
答案 0 :(得分:5)
通常当你从require调用中获取一个空对象时,这是因为你有循环依赖。因此,您需要 A ,这需要 B ,这需要 C ,这需要 A 。在这种情况下, C 将获得一个代表 A 的空对象,因为 A 尚未完成导出其功能/对象和 A A 完成导出后,只能在下一个时间点 C 完全可用。
以下是一个例子:
// a.js
var b = require('./b');
module.exports = {
doStuff: function () {
}
}
// b.js
var c = require('./c');
// c.js
var a = require('./a');
// This will fail because a.js hasn't exported doStuff yet, since a required b, which
// required c, which required a.
a.doStuff();
获得空对象的原因是因为Browserify在模块代码运行之前为该模块创建了一个表示module.exports
的空对象。这意味着另一个模块在完成之前可以要求它,它只是没有完全烘烤。