要求(browserify)在分配(空对象)时不能正常工作,但在内联时工作

Cha*_*had 0 javascript coffeescript browserify reactjs

我在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>
Run Code Online (Sandbox Code Playgroud)

但这有效:

  render: ->
    console.log require('./../utils/comp-utils')
    <div>
      Then
      {require('./../utils/comp-utils').getConstructComponent @props.construct, @props.onUpdate, @props.onRemove}
    </div>
Run Code Online (Sandbox Code Playgroud)

我对此绝对感到困惑.请注意,CompUtils已成功用于其他组件.

And*_*ahl 5

通常当你从require调用中获得一个空对象时,这是因为你有循环依赖.所以,你需要一个,这就要求,这需要Ç,这需要一个.在这种情况下,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();
Run Code Online (Sandbox Code Playgroud)

获得空对象的原因是因为Browserify module.exports在模块代码运行之前创建了一个表示该模块的空对象.这意味着另一个模块可以在它完成之前需要它,它只是没有完全烘烤.