【问题标题】:Can't require a module while using Mocha with Babel compiler将 Mocha 与 Babel 编译器一起使用时不能需要模块
【发布时间】:2015-06-03 18:58:09
【问题描述】:

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

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

Buffer.js 一起

this.foo

当我使用mocha test.js 运行它们时,一切正常,但运行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。

【问题讨论】:

  • 请向我们展示您的Buffer.jstest.js 的完整代码。通常,要require 一个模块,您必须将其导出为带有module.exports = ??? 的模块。
  • @marcel,您可以从该模块导出任何内容,一旦遇到this.foo 行就会失败。
  • 再次:“请向我们展示您的 Buffer.js 和 test.js 的完整代码。”
  • 没有Buffer.js的完整模块代码,或者至少是this.foo的周边部分,很难诊断和正确回答您的问题。
  • @MarkSimulacrum,我的Buffer.js 内容是文件失败的最小示例。访问 this 的属性时会出现此问题。文件中存在哪个属性或其他内容无关紧要。

标签: javascript mocha.js babeljs


【解决方案1】:

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

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

有关详细信息,请参阅documentation

【讨论】:

    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2021-02-13
    相关资源
    最近更新 更多