【发布时间】:2018-12-08 02:44:00
【问题描述】:
这似乎只是一个普通的模块和导出,不确定是什么原因造成的。
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.logged 文件内容,它没有运行它。
我也不想使用--experimental-modules。我不想更改我的文件扩展名,那么如何运行它?
我看了一下这个,它提到了如果你已经在使用 babel-node 进行迁移,但这是唯一的方法吗?
【问题讨论】:
-
我想这可能已经在这里回答了stackoverflow.com/questions/38296667/…
-
是的,但
--experimental-modules应该可以解决我认为的这个问题。 nodejs.org/api/esm.html 这样我就不需要 babel 了 -
啊垃圾文件扩展名必须是mjs
-
我认为你只是错过了
.mjs扩展名(编辑:抱歉页面打开了,看起来你明白了:)) -
是的,就是这样。所以我拿出实验,尝试了babel。我想让它现在在没有 --experimental-modules 的情况下工作