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

运行终端应用程序时意外的令牌导出

宋建柏
2023-03-14

这似乎只是一个普通的模块和导出,不确定是什么导致了这一点。

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


共有1个答案

丁文轩
2023-03-14

要回答您最初的问题,您需要将文件的文件扩展名设为. 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构建的,如果这对您有帮助的话:) 从我所读到的内