这似乎只是一个普通的模块和导出,不确定是什么导致了这一点。
Myes6模块。js
const showCar = () => {
//...code
}
const drive = () => {
//...code
};
drive();
export { drive, showCar }
奇怪的是,在我的测试中,我可以导入和调用这些代码,而且我的测试使用它们并通过。但是当我实际运行通过提示用户输入终端来运行应用程序的驱动器()时,我得到一个错误,说:
SyntaxError:Proxy的createScript(vm.js:246:10)上的新脚本(vm.js:74:7)上出现意外的令牌导出。在模块上运行InthisContext(vm.js:298:10)_编译(internal/modules/cjs/loader.js:670:28)
为什么这个解决方案只适合测试,而不适合代码的实时运行?
下面是我如何运行它的,我的包中有一个脚本。json:
"start": "node --experimental-modules ./myES6Module.js"
所以当我运行纱线开始时
我得到了这个。否则,当我运行测试时,drive()会很好地输出到控制台。
如果我注释掉导出,我的脚本运行良好...但是当然,这打破了我依赖于导出东西的测试。
更新
我使用的是实验模块
因此,自从安装了babel cli后,我尝试了以下方法:
"start": "babel ./myES6Module.js"
包裹json有以下babel包:
"@babel/cli":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","@babel/寄存器":"^7.0.0-beta.51","@babel/core":"^7.0.0-beta.51","
但这只是一种安慰。记录了文件内容,但没有运行它。我也不想使用实验模块。我不想更改我的文件扩展名,因此如何运行此功能?
我看了一下这个,它提到了迁移,如果你已经在使用巴贝尔节点,但这是唯一的方法吗?
https://babeljs.io/docs/en/next/v7-migration
要回答您最初的问题,您需要将文件的文件扩展名设为. mjs
,以便您可以在package.json
脚本中定义:
"start": "node --experimental-modules myES6Module.mjs"
第二部分是关于删除--experimental modules
标志的,正如您所指出的,在使用babel
时,刚刚注销了文件内容。要解决这个问题,您可以使用babel节点
,但请注意它在生产中使用时的警告。在该警告中,您将找到一个指向示例节点服务器的链接,该服务器w/Babel演示了一个可行的解决方案。
在我创建了一个最小工作解决方案后,产生的结果如下:
npm我Babel-cli Babel-preet-es2015
更新您的package.json
到:
"start": "babel-node --presets es2015 myES6Module.js"
和一个正在工作的。js
文件使用导出
:
const showCar = () => {
//...code
}
const drive = () => {
//...code
console.log('driving')
};
drive();
export { drive, showCar }
巴别塔7
如果您想使用版本7,请尝试下面的方法。
npm i@babel/cli@babel/core@babel/node@babel/preset env
。json具有以下依赖项:
"@babel/cli": "^7.0.0-beta.51",
"@babel/core": "^7.0.0-beta.51",
"@babel/node": "^7.0.0-beta.51",
"@babel/preset-env": "^7.0.0-beta.51"
将运行脚本设置为
"start": "babel-node myES6Module.js"
在项目的根级别创建一个. babelrc
文件
{
"presets": ["@babel/preset-env"]
}
现在您可以从终端执行npm run start
,您应该可以看到根据我的示例代码记录到终端的输出driving
。
我以前没有使用过版本7,文档上说。babelrc
文件应该使用“预设”:[“env”]
但我得到了一个错误,但是上面和“预设”:[“@babel/env”]
的工作原理相同。其他人可能知道我遇到的这个错误背后的原因,但这是另一个问题。
问题内容: 我的项目中已经实现了其他相关问题中提供的解决方案,例如在.babelrc中包含正确的预设(es2015)。 我有两个项目(分别称为A和B),它们都使用ES6模块语法。在项目A中,我导入了通过npm安装的项目B,该项目位于node_modules文件夹中。当我为项目A运行测试套件时,出现错误: SyntaxError:意外的令牌导入 在此之前,项目B声称存在以下错误代码行: (函数(导出
在其他相关问题中提供的解决方案,例如在中包括适当的预设(es2015)。babelrc已在我的项目中实现。 我有两个项目(我们称它们为A和B),它们都使用ES6模块语法。在项目A中,我正在导入通过npm安装的项目B,该项目位于node_modules文件夹中。当我为项目A运行测试套件时,我得到了错误: SyntaxError:意外的令牌导入 前面是项目B中的这一错误代码行: (函数(导出、要求、模
我已经为连接的组件创建了测试。在一个文件中,我导入位于项目根文件夹外部的“本地化”模块。它没有被编译到ES5,Jest报告了同步错误:意外令牌导出。如何强制Jest转换该文件? 我有。带环境预设的巴别LRC。 package.json
在设置Javascript Dev环境时,我遇到了以下错误。 我想使用代替。 我用了巴别塔。 我从以下方法尝试了许多解决方案,但是,不起作用或我。 节点错误:语法错误:意外的令牌导入 Node.js -语法错误:意外的标记导入 srcServer.js 。巴伯尔克
问题内容: 我不明白怎么了。节点v5.6.0 NPM v3.10.6 代码: 错误: 问题答案: 更新3: 从Node 13开始 ,您可以使用.mjs扩展名,也可以在package.json中设置“ type”:“ module”。你 并不 需要使用标志。 更新2: 从Node 12开始 ,您可以使用扩展名,也可以在package.json中进行设置。并且您需要运行带有标志的节点。 更新: 在节点
我开始了一个新的反应项目,我想使用笑话作为测试平台。尽管有文档、博客和许多其他资源,如stackoverflow,我总是有一个“意外令牌导入”错误,可能与巴贝尔问题有关,但我的conf似乎还不错。欢迎任何帮助。 我的Jest配置文件(在package.json中)。My package.json具有类似babel jest、babel-preset-es2015、babel preset reac
我正在学习反应,我想测试我的一个组件,但我坚持这个错误: 以下是我在阅读stackoverflow和github上的帖子时尝试过的一些东西 添加了测试预设和这些插件“变换-es2015-moids-Common js”、动态导入节点”到我的babel配置 在我的包裹里。json Jest属性具有以下设置: 我的实际组件是用ES6和typescript构建的,如果这对您有帮助的话:) 从我所读到的内