在node_modules /中运行带有ES6文件的Mocha时出错

时间:2018-03-09 22:55:48

标签: javascript ecmascript-6 mocha babeljs

我有一个使用ES6语法的文件,当我尝试运行Mocha时会导致以下错误:

import 'test';
^^^^^^

SyntaxError: Unexpected token import
    at createScript (vm.js:74:10)
    at Object.runInThisContext (vm.js:116:10)
    at Module._compile (module.js:533:28)
    at Module._extensions..js (module.js:580:10)

我使用以下npm命令运行我的测试:

"test": "mocha --reporter progress --require babel-core/register tools/testSetup.js \"**/*_spec.jsx\""

这是我的.babelrc文件:

{
  "presets": ["es2015", "react"]
}

使用ES6语法的文件包含在通过git引用的私有模块下的node_modules /中。有没有办法运行Mocha而不必从这个私有模块手动删除ES6语法?当我运行Mocha时,我项目中的所有常规ES6文件都不会引起任何问题。

3 个答案:

答案 0 :(得分:1)

babel-register是正确的方法,但不幸的是,它默认忽略node_modules中的代码:https://babeljs.io/docs/usage/babel-register/#ignores-node_modules-by-default

你可以通过一个选项告诉它不要这样做:

require("babel-register")({
  // This will override `node_modules` ignoring - you can alternatively pass
  // an array of strings to be explicitly matched or a regex / glob
  ignore: false
});

这不会在命令行上运行,因此您可能需要将这行代码添加到testSetup.js文件中(将其作为文件中的第一个内容)并删除--require babel-core/register从命令行选项。

答案 1 :(得分:0)

npm i @babel/register -D

修改package.json

"mocha": "./node_modules/.bin/mocha --compilers js:@babel/register",

答案 2 :(得分:0)

https://github.com/TypeStrong/ts-node/issues/617,已经有ts-node对此问题进行了归档。总而言之,默认情况下,ts-node不传输node_modules软件包。如果您的ts文件中有一个指向node_module软件包之一的import语句,则遵循依赖关系规则,ts-node将对其进行编译(如果您使用的是node10或更高版本)。如果您使用的节点版本小于10,则您无论如何都会以上述错误结束。

如上述链接中blakeembrey所述,

TS节点默认情况下不编译node_modules中的文件。如果要使用ES模块,则应更新到本机支持ES模块的node.js版本,使用esm之类的东西,或者通过更改--ignore来更改默认行为。

在理想情况下,您不应使用带有ts文件的npm软件包。应该是JS文件。如此处所述https://github.com/TypeStrong/ts-node#import-statements