当前位置: 首页 > 知识库问答 >
问题:

Babel在运行mocha测试时意外导入令牌

子车轶
2023-03-14

在其他相关问题中提供的解决方案,例如在中包括适当的预设(es2015)。babelrc已在我的项目中实现。

我有两个项目(我们称它们为A和B),它们都使用ES6模块语法。在项目A中,我正在导入通过npm安装的项目B,该项目位于node_modules文件夹中。当我为项目A运行测试套件时,我得到了错误:

SyntaxError:意外的令牌导入

前面是项目B中的这一错误代码行:

(函数(导出、要求、模块、_文件名、_目录名){从'history/lib/createBrowserHistory'导入createBrowserHistory';

iife似乎与npm或babel有关,因为我的源文件仅包含“从'history/lib/createBrowserHistory'导入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

这是来自包的测试命令。json:

"test": "mocha --compilers js:babel-core/register '+(test|src)/**/*Spec.js'"

这个StackOverflow帖子与此类似,但没有为我使用命令行提供解决方案:使用babel从node_模块导入模块,但失败

共有3个答案

南门向荣
2023-03-14

当然你会有这个问题,你用的是摩卡不知道的ES6

所以你用的是巴贝尔,但你在测试中没有用它。。。

几个解决方案:

A.如果您使用NPM运行,请使用

“测试”:“摩卡——编译器js:babel核心/注册测试*.js”

B.我正在使用

"test":"./node_modules/. bin/mocha--编译器js: Babel-core/寄存器**/*spec.jsx"

C.从cli:

js: Babel-core/寄存器测试*. js

你可以在http://www.pauleveritt.org/articles/pylyglot/es6_imports/

林运浩
2023-03-14

似乎唯一的解决办法是明确包括:

require('babel-core/register')({
  ignore: /node_modules/(?!ProjectB)/
}); 

在测试助手文件中,并在我的测试命令中将它传递给mocha:

mocha --require ./test/testHelper.js...

最终解决办法:

添加注册表标签。js:一个单独的文件,其工作是要求babel core/register。。。

require('babel-core/register')({
  ignore: /node_modules/(?!ProjectB)/
});

添加一个条目。如果您的应用程序也依赖于babel节点,则使用js。它充当包含es6的应用程序的包装器。

require('./registerBabel');
require('./server'); // this file has some es6 imports

然后,您将使用节点条目运行您的应用程序

对于mocha测试,请选择testHelper。js应该需要registerbel。js还可以在运行时初始化babel支持。

require('./registerBabel');

并使用mocha--要求运行mocha测试。/testHelper.js'(test)/**/*Spec.js'

这将递归测试“/test”中以“Spec.js”结尾的任何文件。将该图案替换为与项目中的规格匹配的图案。

居英资
2023-03-14

解决这个问题最简单的方法是:

>

  • npm安装babel-preset-es2015——保存开发文件
  • 添加。将LRC添加到项目的根目录,内容如下:

    {
     "presets": [ "es2015" ]
    }
    

    确保使用“-compilers js:babel core/register”参数运行mocha。

    >

  • npm安装@babel/preset env——保存开发
  • 添加。将LRC添加到项目的根目录,内容如下:

    {
     "presets": [ "@babel/preset-env" ]
    }
    

    确保您运行的mocha带有--compiler js: Babel-寄存器(Babel 6)或--compiler js:@Babel/寄存器(Babel 7)参数

    对于摩卡7版或更高版本,分别使用--需要巴贝尔寄存器--需要@babel/寄存器

  •  类似资料:
    • 问题内容: 我的项目中已经实现了其他相关问题中提供的解决方案,例如在.babelrc中包含正确的预设(es2015)。 我有两个项目(分别称为A和B),它们都使用ES6模块语法。在项目A中,我导入了通过npm安装的项目B,该项目位于node_modules文件夹中。当我为项目A运行测试套件时,出现错误: SyntaxError:意外的令牌导入 在此之前,项目B声称存在以下错误代码行: (函数(导出

    • 问题内容: 我正在尝试通过使用CLI来运行Babel,但我不断收到错误消息。我知道Babel 6都是关于插件的,我需要设置插件,但似乎无法正常工作。 所以这是我的问题: 我应该使用语法出口扩展插件吗?我也尝试过使用替代方法来设置插件,但仍然没有运气。 另外,Babel 6的CLI是否具有全局选项?如果必须为每个需要它的项目安装插件,这似乎很麻烦。 对于那些对我要导出的内容感到好奇的人,下面是课程:

    • 问题内容: 这是我来自package.json文件的笑话配置: .babelrc文件位于我的根文件夹中: 根据在开玩笑的入门页面上找到的文档,这是babel运作所需的一切,这很神奇。 无论如何,此测试: 返回: 我究竟做错了什么? 问题答案: Jest设置了env变量进行测试,因此我不得不将预设添加到.babelrc中的env设置中:

    • 我在将单元测试集成到项目的特定文件夹中时遇到问题。 我的架构如下: 作业板和管理面板都包含指向共享的符号链接,位于,每个都包含安装了babel eslint的文件夹。shared不包含node_modules文件夹,它依赖于另外两个文件夹的node_模块。 有了这个架构,我成功地配置了我正在使用的所有工具(Webpack、eslint、eslint loader等等,但不是Jest)。 问题是,当

    • 问题内容: 当我使用babel观看jsx文件时。但是存在语法错误。 在此之前,我使用react-tools进行观看,一切都很好。 以下是我的代码。 问题答案: 前几天我遇到了类似的问题。看来babel现在需要一些其他插件才能与react一起工作。

    • 使用Jest测试Firebase功能,我遇到了导入的麻烦... console.log 我正在使用@Babel/core和@Babel/preet-env和Babel-jest package.json 我创建了一个babel.config.js文件 babel.config.js 我错过了什么?谢谢你的反馈 更新 我用Babel文档更新了我的配置。。。(v 7) console.log pack