我有一个使用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文件都不会引起任何问题。
答案 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