我试图在我的项目中运行一些ES6代码,但我得到了一个意外的令牌导出错误。
export class MyClass {
constructor() {
console.log("es6");
}
}
我试图在我的项目中运行一些ES6代码,但我得到了一个意外的令牌导出错误。
export class MyClass {
constructor() {
console.log("es6");
}
}
当前回答
安装babel包@babel/core和@babel/preset,这将把ES6转换为commonjs目标,因为node js不直接理解ES6目标
npm install --save-dev @babel/core @babel/preset-env
然后,您需要在项目的根目录中创建一个名为.babelrc的配置文件,并将这段代码添加到其中。
[“@babel/preset-env”]
其他回答
此时没有必要使用Babel (JS已经变得非常强大),因为您可以简单地使用默认的JavaScript模块导出。查看完整教程
Message.js
module.exports = 'Hello world';
app.js
var msg = require('./Messages.js');
console.log(msg); // Hello World
如果遇到此错误,也可能与将JavaScript文件包含到html页面的方式有关。在加载模块时,必须显式地声明这些文件。这里有一个例子:
//module.js:
function foo(){
return "foo";
}
var bar = "bar";
export { foo, bar };
当你像这样包含脚本时:
<script src="module.js"></script>
你会得到错误:
Uncaught SyntaxError:意外的令牌导出
你需要包含一个type属性设置为"module"的文件:
<script type="module" src="module.js"></script>
然后它应该会像预期的那样工作,你已经准备好在另一个模块中导入你的模块了:
import { foo, bar } from "./module.js";
console.log( foo() );
console.log( bar );
只需使用tsx作为运行时而不是节点。它将允许你使用正常的import语句,而不必将你的项目切换到type: module,也不必处理type: module的讨厌后果。此外,你还将获得TypeScript支持。
在最新版本的Nodejs (v17?)中,您可以通过使用.mjs文件扩展名来使用顶级的“import”,“async”,“await”-而不是transpiling或变通方法。
// > node my.mjs
import {MyClass} from 'https://someurl'
async func () {
// return some promise
}
await func ()
我通过制作一个入口点文件来解决这个问题。
// index.js
require = require('esm')(module)
module.exports = require('./app.js')
我在app.js内外导入的任何文件都可以使用导入/导出 现在你可以像node index.js一样运行它
注意:如果app.js使用export default,在使用入口点文件时,这将变成require('./app.js').default。