Я пытаюсь запустить некоторый код ES6 в моем проекте, но я получаю непредвиденную ошибку экспорта токена.
export class MyClass {
constructor() {
console.log("es6");
}
}
Я пытаюсь запустить некоторый код ES6 в моем проекте, но я получаю непредвиденную ошибку экспорта токена.
export class MyClass {
constructor() {
console.log("es6");
}
}
Вы используете синтаксис модуля ES6.
Это означает, что ваша среда (например, node.js) должна поддерживать синтаксис модуля ES6.
NodeJS использует синтаксис модуля CommonJS (module.exports
), а не синтаксис модуля ES6 (ключевое слово export
).
Решение:
babel
npm, чтобы перенести ES6 к цели commonjs
или же
В случае, если вы получите эту ошибку, это также может быть связано с тем, как вы включили файл javascript на свою HTML-страницу. При загрузке модулей вы должны явно объявить эти файлы как таковые. Вот пример:
//module.js:
function foo(){
return "foo";
}
var bar = "bar";
export { foo, bar };
Когда вы включаете скрипт следующим образом:
<script src="module.js"></script>
Вы получите ошибку:
Uncaught SyntaxError: Неожиданный экспорт токена
Вам необходимо включить файл с атрибутом типа, установленным на "модуль":
<script type="module" src="module.js"></script>
И тогда он будет работать как положено, и вы готовы импортировать свой модуль в другой модуль:
import { foo, bar } from "./module.js";
console.log( foo() );
console.log( bar );
Для использования ES6 добавьте babel-preset-env
и в вашем .babelrc
:
{
"presets": ["@babel/preset-env"]
}
Ответ обновлен благодаря комментарию @ghanbari для применения babel 7.
Установите пакеты babel @babel/core
и @babel/preset
которые преобразуют ES6 в цель commonjs, поскольку узел js не понимает цели ES6 напрямую.
npm install --save-dev @babel/core @babel/preset-env
Затем вам нужно создать один файл конфигурации с именем .babelrc
в корневой директории вашего проекта и добавить туда этот код
{ "presets": ["@babel/preset-env"] }
В данный момент нет необходимости использовать Babel (JS стал очень мощным), когда вы можете просто использовать экспорт модуля JavaScript по умолчанию. Ознакомьтесь с полным руководством
Message.js
module.exports = 'Hello world';
app.js
var msg = require('./Messages.js');
console.log(msg); // Hello World
Использование синтаксиса ES6 не работает в узле, к сожалению, вам необходимо иметь babel, чтобы компилятор понимал синтаксис, такой как экспорт или импорт.
npm install babel-cli --save
Теперь нам нужно создать файл .babelrc, в файле babelrc, хорошо настроить babel для использования предустановки es2015, которую мы установили в качестве предустановки при компиляции в ES5.
В корне нашего приложения хорошо создайте файл .babelrc. $ npm install babel-preset-es2015 --save
В корне нашего приложения хорошо создайте файл .babelrc.
{ "presets": ["es2015"] }
Надеюсь, что это работает... :)