这似乎只是一个普通的模块并导出,不确定是什么原因造成的。
myES6Module.js
const showCar = () => {
//...code
}
const drive = () => {
//...code
};
drive();
export { drive, showCar }
我的测试中有什么奇怪的地方,我能够导入并称其为好,我的测试使用它们并通过。但是当我实际运行drive()时,提示用户输入终端输入来运行应用程序,但出现错误消息:
SyntaxError: Unexpected token export
at new Script (vm.js:74:7)
at createScript (vm.js:246:10)
at Proxy.runInThisContext (vm.js:298:10)
at 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.log记录了文件内容,它没有运行它。
我也不想使用--experimental-modules
。我不想更改文件扩展名,所以我如何运行它?
我看了一下,它提到了如果您已经在使用babel-node进行迁移,那是唯一的方法吗?
答案 0 :(得分:0)
要回答您的第一个问题,您需要将文件扩展名为.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"
以及使用.js
的有效export
文件:
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"]
的工作原理相同。可能有人知道我遇到此错误的原因,但这是另一个问题。