gpt4 book ai didi

javascript - 运行终端应用程序时出现意外的 token 导出

转载 作者:行者123 更新时间:2023-11-29 16:02:17 27 4
gpt4 key购买 nike

这似乎只是一个正常的模块和导出,不确定是什么原因造成的。

myES6Module.js

const showCar = () => {
//...code
}

const drive = () => {
//...code
};

drive();

export { drive, showCar }

奇怪的是,在我的测试中,我能够很好地导入和调用它们,并且我的测试使用它们并通过。但是当我实际运行 drive()(它通过提示用户终端输入来运行应用程序)时,我收到一条错误消息:


语法错误:意外的 token 导出
在新脚本 (vm.js:74:7)
在 createScript (vm.js:246:10)
在 Proxy.runInThisContext (vm.js:298:10)
在 Module._compile (internal/modules/cjs/loader.js:670:28)

为什么这个解决方案只适用于测试而不是代码的实时运行?

这是我运行它的方式,我的 package.json 中的一个脚本:

"start": "node --experimental-modules ./myES6Module.js"

所以当我运行 yarn start 时,我明白了。否则,当我运行测试时,drive() 会正常输出到控制台。

如果我注释掉那个导出,我的脚本运行正常...但当然这会破坏依赖于导出内容的测试。

更新

我正在使用 --experimental-modules

所以我尝试了这个,因为我安装了 babel-cli:

"start": "babel ./myES6Module.js"

package.json 包含以下 babel 包:


"@babel/cli": "^7.0.0-beta.51",
"@babel/preset-env": "^7.0.0-beta.51",
"@babel/register": "^7.0.0-beta.51",
"@babel/core": "^7.0.0-beta.51",

但只是 console.logged 文件内容,并没有运行它。我也不想使用 --experimental-modules我不想更改我的文件扩展名,那么如何让它运行呢?

我看了一下这个,它提到了如果你已经在使用 babel-node 就迁移,但这是唯一的方法吗?

https://babeljs.io/docs/en/next/v7-migration

最佳答案

要回答您最初的问题,您需要将文件的文件扩展名设为 .mjs,以便您可以在 package.json 脚本中定义:

"start": "node --experimental-modules myES6Module.mjs"

关于删除 --experimental-modules 标志的第二部分正如您所说,只是在使用 babel 时注销了文件内容。要解决这个问题,您可以使用 babel-node但请注意其在生产中使用时的警告。在该警告中,您会找到指向 Example Node Server w/ Babel 的链接展示可行的解决方案。

在我创建了一个适用于我的最小工作解决方案之后,要产生你想要的结果:

npm i babel-cli babel-preset-es2015

将您的 package.json 更新为:

"start": "babel-node --presets es2015 myES6Module.js"

以及使用 export 的工作 .js 文件:

const showCar = () => {
//...code
}

const drive = () => {
//...code
console.log('driving')
};

drive();

export { drive, showCar }

Babel 7

如果您想使用版本 7,请尝试以下操作。

npm i @babel/cli @babel/core @babel/node @babel/preset-env 所以你的 package.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 文件应该使用 "presets": ["env"] 但我得到了一个错误,但是上面的和 "presets": ["@babel/env"] 是一样的。其他人可能知道我遇到这个错误背后的原因,但这是另一个问题。

关于javascript - 运行终端应用程序时出现意外的 token 导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092673/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com