Javascript browserify循环依赖:有些东西不是函数

Javascript browserify循环依赖:有些东西不是函数,javascript,google-chrome-extension,browserify,commonjs,Javascript,Google Chrome Extension,Browserify,Commonjs,我最近开始编写CommonJS模块,但在需要模块时遇到了一些问题。为什么storage.js无法访问我所需的示例模块?在这种情况下,需要依赖模块的正确方式是什么 编辑:包含更多信息,因为前面的问题忽略了hello.js,我认为这不是问题的原因。似乎包含它会导致未捕获类型错误。此外,这是chrome扩展代码的一部分,main.js是内容脚本 //main.js var hello=require('./hello'); var存储=需要('./存储'); 变量示例=要求('./示例'); stor

我最近开始编写CommonJS模块,但在需要模块时遇到了一些问题。为什么storage.js无法访问我所需的示例模块?在这种情况下,需要依赖模块的正确方式是什么

编辑:包含更多信息,因为前面的问题忽略了hello.js,我认为这不是问题的原因。似乎包含它会导致未捕获类型错误。此外,这是chrome扩展代码的一部分,main.js是内容脚本

//main.js
var hello=require('./hello');
var存储=需要('./存储');
变量示例=要求('./示例');
storage.store();
//storage.js
变量示例=要求('./示例');
module.exports=(函数(){
函数存储区(){example.ex();}
返回{store:store};
})();
//example.js
var存储=需要('./存储');
module.exports=(函数(){
函数ex(){
log('example');
}    
返回{ex:ex};
})();
//你好

变量示例=要求('./示例');// 不是对您的问题的直接回答,但是Browserify将为您封装在一个自调用函数中。您可以简化lib文件:

// main.js
var storage = require('./storage');
storage.store();
因为您不使用
hello
example
,所以不需要它们

// storage.js
var example = require('./example');
function store() {example.ex();}
module.exports.store = store;
这里不需要执行自调用函数

// example.js
module.exports.ex = ex;
function ex() {
    console.log('Example');
}
这不使用
存储
,因此不要包含它

hello.js
只会触发循环依赖项,然后将其删除


在更新的代码中,
storage.js
example.js
之间存在循环依赖关系。因为在
示例
中不使用
存储
中的任何内容,所以可以删除该要求。我仍然认为应该删除自调用函数,因为这已经是commonjs的一部分


加载模块时,Commonjs只执行一次文件。然后缓存
模块.exports上的所有内容,以备将来调用。当您第一次包含循环依赖项时,模块加载器会看到它当前正在加载,而您不会得到任何结果。后续调用将正常完成。

是否在全局范围内使用
var storage
?只需按原样粘贴代码(仅插入函数控制台输出以检查调用内容),一切正常,没有任何错误,名称为@dajnz。在package.json或dotfiles中是否有任何browserify或webpack覆盖?对于browserify,我只更新了transform-browserify shim,没有更新任何其他代码。以前遗漏了一些重要信息
// example.js
module.exports.ex = ex;
function ex() {
    console.log('Example');
}