在尝试从本地项目中导入模块时遇到module is not defined
错误。使用node和requirejs-
Error: Evaluating /Users/Projects/stash/NODE/project_js/src/foo.js as module "foo" failed with error: ReferenceError: module is not defined
代码看起来像-
(function() {
const requirejs = require('requirejs')
requirejs.config({
baseUrl: __dirname,
nodeRequire:require
});
//var foo = requirejs('foo.js');
requirejs(['foo'], function() {
foo().then(data => {
data.foreach(function(item, index, data) {
console.log(JSON.stringify(item))
})
});
})
})();
该模块具有以下导出-
module.exports = function foo() {
.
.
.
return results
}
我也尝试过同步加载模块。
答案 0 :(得分:0)
检查其文档的this part:如果RequireJS找到了要加载的模块(此处为foo
)(即其配置允许它找到该模块),则必须声明该模块使用define
代替Node的exports
。
我刚刚试过了,效果很好:
目录结构
test/
index.js
foo.js
index.js
(function() {
const requirejs = require('requirejs');
requirejs.config({
baseUrl: __dirname,
nodeRequire:require
});
requirejs(['foo'], (foo) => {
console.log('loaded!', foo, foo());
});
})();
foo.js
(这很有趣)
define(function() {
return function foo() {
return 'fooResult';
}
});
使用module.exports = ...
给了我您所遇到的错误。
但是,Node的内置require
无法“加载”此RequireJS API,因此需要精确的配置以反映Node所需模块(CommonJS API)和RequireJS-定义的模块(AMD API)。 (实际上,您可以检查整个"Why AMD?"页,这对您使用RequireJS很有帮助。)