我试图在我的项目中运行一些ES6代码,但出现意外的令牌导出错误。
export class MyClass {
constructor() {
console.log("es6");
}
}
module.exports = MyClass
,而不是export class MyClass
我试图在我的项目中运行一些ES6代码,但出现意外的令牌导出错误。
export class MyClass {
constructor() {
console.log("es6");
}
}
module.exports = MyClass
,而不是export class MyClass
Answers:
您正在使用ES6模块语法。
这意味着您的环境(例如,node.js)必须支持ES6模块语法。
NodeJS使用CommonJS Module语法(module.exports
)而不是ES6模块语法(export
关键字)。
解:
babel
npm软件包将ES6转换为commonjs
目标要么
CommonJS语法的示例是(来自flaviocopes.com/commonjs/):
exports.uppercase = str => str.toUpperCase()
exports.a = 1
import
?我以为v10.0.0会有,但显然没有。
如果出现此错误,则可能还与将javascript文件包含到html页面中的方式有关。加载模块时,您必须像这样明确声明这些文件。这里是一个例子:
//module.js:
function foo(){
return "foo";
}
var bar = "bar";
export { foo, bar };
当包含这样的脚本时:
<script src="module.js"></script>
您将收到错误:
未捕获的SyntaxError:意外的令牌导出
您需要包含类型属性设置为“模块”的文件:
<script type="module" src="module.js"></script>
然后它将按预期工作,并且您准备将模块导入另一个模块:
import { foo, bar } from "./module.js";
console.log( foo() );
console.log( bar );
type
应该是有效的mime类型(又称为媒体类型),因此这是意外的发现。谢谢!
<script type="module">import ...</script>
从模块导入时,必须使用。我在最新版本的Chromium中对其进行了测试。
我的两分钱
ES6
myClass.js
export class MyClass1 {
}
export class MyClass2 {
}
other.js
import { MyClass1, MyClass2 } from './myClass';
CommonJS替代
myClass.js
class MyClass1 {
}
class MyClass2 {
}
module.exports = { MyClass1, MyClass2 }
// or
// exports = { MyClass1, MyClass2 };
other.js
const { MyClass1, MyClass2 } = require('./myClass');
ES6
myClass.js
export default class MyClass {
}
other.js
import MyClass from './myClass';
CommonJS替代
myClass.js
module.exports = class MyClass1 {
}
other.js
const MyClass = require('./myClass');
希望这可以帮助
现在,您只需使用默认的JavaScript模块导出,就无需使用Babel(JS变得非常强大)。查看完整教程
Message.js
module.exports = 'Hello world';
app.js
var msg = require('./Messages.js');
console.log(msg); // Hello World
我通过制作一个入口文件来解决这个问题。
// index.js
require = require('esm')(module)
module.exports = require('./app.js')
任何文件I进口内app.js
及以后的工作imports/exports
,现在你只要运行它像node index.js
注意:如果app.js
使用export default
,则require('./app.js').default
在使用入口点文件时会变为。
使用ES6语法在节点中不起作用,不幸的是,您显然必须具有babel才能使编译器理解诸如导出或导入之类的语法。
npm install babel-cli --save
现在我们需要创建一个.babelrc文件,在babelrc文件中,我们将babel设置为在编译为ES5时使用我们安装的es2015预设作为其预设。
在应用程序的根目录下,我们将创建一个.babelrc文件。$ npm install babel-preset-es2015-保存
在应用程序的根目录下,我们将创建一个.babelrc文件。
{ "presets": ["es2015"] }
希望它能起作用... :)
export
(仅在ES6中可用),并且这些模块提供了ES6支持。