我试图在我的项目中运行一些 ES6 代码,但出现意外的令牌导出错误。
export class MyClass {
constructor() {
console.log("es6");
}
}
我试图在我的项目中运行一些 ES6 代码,但出现意外的令牌导出错误。
export class MyClass {
constructor() {
console.log("es6");
}
}
您正在使用 ES6 module语法。
这意味着您的环境(例如 node.js)必须支持 ES6 module语法。
NodeJS 使用 CommonJS module语法(module.exports
)而不是 ES6 module语法(export
关键字)。
解决方案:
babel
npm 包将 ES6 转换为commonjs
目标或者
CommonJS 语法的示例是(来自flaviocopes.com/commonjs/):
exports.uppercase = str => str.toUpperCase()
exports.a = 1
如果您收到此错误,也可能与您将 JavaScript 文件包含到 html 页面的方式有关。加载module时,您必须明确声明这些文件。下面是一个例子:
//module.js:
function foo(){
return "foo";
}
var bar = "bar";
export { foo, bar };
当您包含这样的脚本时:
<script src="module.js"></script>
你会得到错误:
未捕获的语法错误:意外的令牌导出
您需要包含类型属性设置为“module”的文件:
<script type="module" src="module.js"></script>
那么它应该会按预期工作,并且您已准备好将您的module导入另一个module:
import { foo, bar } from "./module.js";
console.log( foo() );
console.log( bar );
我的两分钱
ES6
我的类.js
export class MyClass1 {
}
export class MyClass2 {
}
其他.js
import { MyClass1, MyClass2 } from './myClass';
CommonJS 替代品
我的类.js
class MyClass1 {
}
class MyClass2 {
}
module.exports = { MyClass1, MyClass2 }
// or
// exports = { MyClass1, MyClass2 };
其他.js
const { MyClass1, MyClass2 } = require('./myClass');
ES6
我的类.js
export default class MyClass {
}
其他.js
import MyClass from './myClass';
CommonJS 替代品
我的类.js
module.exports = class MyClass1 {
}
其他.js
const MyClass = require('./myClass');
希望这可以帮助
我通过制作一个入口点文件来解决这个问题。
// index.js
require = require('esm')(module)
module.exports = require('./app.js')
以及我在内部app.js
和外部导入的任何文件,imports/exports
现在您只需像这样运行它node index.js
注意:如果app.js
使用export default
,则require('./app.js').default
在使用入口点文件时变为。
现在不需要使用 Babel(JS 变得非常强大),只需使用默认的 JavaScript module导出即可。查看完整教程
消息.js
module.exports = 'Hello world';
应用程序.js
var msg = require('./Messages.js');
console.log(msg); // Hello World