节点+ requirejs:模块未定义

时间:2019-01-24 03:33:48

标签: node.js module requirejs

在尝试从本地项目中导入模块时遇到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
}

我也尝试过同步加载模块。

1 个答案:

答案 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很有帮助。)