【问题标题】:Recursive modules return empty element when required [duplicate]递归模块在需要时返回空元素[重复]
【发布时间】:2021-09-17 11:29:59
【问题描述】:

我目前有一个程序结构类似于下面的最小示例。我有对象foo 有方法addColor,需要模块bar

bar 需要baz 并传递参数color

baz 需要foo 来编辑来自foo 的属性(addColor 必须为foo.colors 添加颜色)

但是在baz内部:foo返回{}并出现以下错误。

foo.colors.push(color);
           ^

TypeError: Cannot read property 'push' of undefined

我认为这是模块递归的问题,如果不重新构建我的程序,则无法找到解决此问题的方法。

index.js

const foo = require('./foo');

console.log(foo);
// { colors: [ 'red', 'green' ], addColor: [Function (anonymous)] }

foo.addColor('blue');

foo.js

module.exports = {
  colors: ['red', 'green'],
  addColor: require('./bar')
}

bar.js

const baz = require('./baz');
module.exports = color => {
  baz(color);
};

baz.js

const foo = require('./foo');
module.exports = color => {
  console.log(foo); // {}

  foo.colors.push(color);
  /*
    foo.colors.push(color);
               ^

    TypeError: Cannot read property 'push' of undefined
  */
};

【问题讨论】:

    标签: javascript node.js recursion module require


    【解决方案1】:

    你的依赖图中有一个循环。这很可能会导致问题。有关如何解决问题的一些想法,请参阅此问题:How to deal with cyclic dependencies in Node.js

    【讨论】:

    • 感谢您的信息,但我最终将foo 设为全局环境变量。我会将我的问题标记为与您链接的主题重复的问题。
    猜你喜欢
    • 1970-01-01
    • 2016-01-25
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 2019-06-14
    • 2022-11-23
    相关资源
    最近更新 更多