其他相关问题中提供的解决方案,例如在 .babelrc 中包含正确的预设(es2015),已经在我的项目中实现。
我有两个项目(我们称它们为 A 和 B),它们都使用 ES6 模块语法。在项目 A 中,我正在导入通过 npm 安装并位于 node_modules 文件夹中的项目 B。当我为项目 A 运行测试套件时,出现错误:
SyntaxError:意外的令牌导入
前面是来自项目 B 的所谓错误代码行:
(function (exports, require, module, __filename, __dirname) { import createBrowserHistory from ‘history/lib/createBrowserHistory’;
iife 似乎与 npm 或可能与 babel 相关,因为我的源文件仅包含“import createBrowserHistory from ‘history/lib/createBrowserHistory’; 项目 B 的测试套件中的单元测试运行良好,如果我将项目 B 作为依赖项从项目 A,然后我的测试套件(仍然使用 es6 导入内部项目模块)工作得很好。
全栈跟踪:
SyntaxError: Unexpected token import
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:374:25)
at Module._extensions..js (module.js:405:10)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:138:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (actionCreators.js:4:17)
at Module._compile (module.js:398:26)
at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/ProjectA/src/components/core/wrapper/wrapper.js:28:23)
at Module._compile (module.js:398:26)
at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/ProjectA/src/components/core/wrapper/wrapperSpec.js:15:16)
at Module._compile (module.js:398:26)
at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at /ProjectA/node_modules/mocha/lib/mocha.js:219:27
at Array.forEach (native)
at Mocha.loadFiles (/ProjectA/node_modules/mocha/lib/mocha.js:216:14)
at Mocha.run (/ProjectA/node_modules/mocha/lib/mocha.js:468:10)
at Object.<anonymous> (/ProjectA/node_modules/mocha/bin/_mocha:403:18)
at Module._compile (module.js:398:26)
at Object.Module._extensions..js (module.js:405:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Function.Module.runMain (module.js:430:10)
at startup (node.js:141:18)
at node.js:980:3
这是我来自 package.json 的测试命令:
"test": "mocha --compilers js:babel-core/register '+(test|src)/**/*Spec.js'"
这篇 StackOverflow 帖子类似,但没有为我使用命令行提供解决方案: import a module from node_modules with babel but failed
原文由 ThinkingInBits 发布,翻译遵循 CC BY-SA 4.0 许可协议
似乎唯一的解决方案是明确包括:
在测试帮助文件中,并在我的测试命令中将其传递给 mocha:
最终的解决方案:
添加 registerBabel.js :一个单独的文件,其工作是需要 babel-core/register…
如果您的应用程序还依赖于 babel-node,请添加 entry.js 。这充当包含 es6 的应用程序的包装器。
然后,您将使用
node entry
运行您的应用程序对于 mocha 测试, testHelper.js 也应该需要 registerBabel.js 以在运行时初始化 babel 支持。
并使用
mocha --require ./testHelper.js '+(test)/**/*Spec.js'
运行你的 mocha 测试这将递归测试“./test”中以“Spec.js”结尾的任何文件。用与项目中的规范匹配的模式替换模式。