将 Mocha 与 Babel 编译器一起使用时不需要模块

Can't require a module while using Mocha with Babel compiler

我有两个文件:test.js 其中包含

var Buffer = require('./Buffer');

Buffer.js以及

this.foo

当我 运行 他们使用 mocha test.js 时,一切正常,但是 运行ning mocha --compilers js:babel/register test.js 生成以下错误

TypeError: Cannot read property 'foo' of undefined
at Object.<anonymous> (/path/Buffer.js:1:1)
at Module._compile (module.js:460:26)
at normalLoader (/path/node_modules/babel/node_modules/babel-core/lib/babel/api/register/node.js:150:5)
at Object.require.extensions.(anonymous function) [as .js] (/path/node_modules/babel/node_modules/babel-core/lib/babel/api/register/node.js:163:7)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (/path/parser_test.js:2:14)
at Module._compile (module.js:460:26)
at normalLoader (/path/node_modules/babel/node_modules/babel-core/lib/babel/api/register/node.js:150:5)
at Object.require.extensions.(anonymous function) [as .js] (/path/node_modules/babel/node_modules/babel-core/lib/babel/api/register/node.js:163:7)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at /path/node_modules/mocha/lib/mocha.js:192:27
at Array.forEach (native)
at Mocha.loadFiles (/path/node_modules/mocha/lib/mocha.js:189:14)
at Mocha.run (/path/node_modules/mocha/lib/mocha.js:422:31)
at Object.<anonymous> (/path/node_modules/mocha/bin/_mocha:398:16)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3

为什么当我需要一个模块时 this 是未定义的?如果您需要任何其他信息来重现错误,请告诉我。

我使用 babel 5.5.0 和 mocha 2.2.5。

Babel 期望给它的输入是一个 ES6/ES2015 模块。在模块中,顶级 this 是规范 undefined

babel --blacklist strict script.js 将允许您禁用此行为,但这不符合规范,因此这可能不是最好的主意。作为替代方案,您可以使用 global 来访问 node 中的全局对象。

有关详细信息,请参阅 documentation