Получение ошибки "Неожиданный токен Export"
Я пытаюсь запустить код ES6 в своем проекте, но получаю ошибку "неожиданный токен export".
export class MyClass {
constructor() {
console.log("es6");
}
}
Как можно решить эту проблему?
5 ответ(ов)
Если вы столкнулись с этой ошибкой, это может быть связано с тем, как вы подключили файл JavaScript на вашей HTML-странице. При загрузке модулей необходимо явно указать, что это модули. Вот пример:
// module.js:
function foo(){
return "foo";
}
var bar = "bar";
export { foo, bar };
Когда вы подключаете скрипт так:
<script src="module.js"></script>
вы получите ошибку:
Uncaught SyntaxError: Unexpected token export
Для корректной работы вам нужно подключить файл с атрибутом type, установленным на "module":
<script type="module" src="module.js"></script>
После этого должно работать согласно ожиданиям, и вы сможете импортировать ваш модуль в другом модуле:
import { foo, bar } from "./module.js";
console.log(foo());
console.log(bar);
Таким образом, убедитесь, что вы используете type="module"
при подключении модулей.
Вот мой вклад по вашему вопросу.
Экспорт
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 }
// или
// 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');
Если у вас есть дополнительные вопросы или нужна помощь, не стесняйтесь спрашивать!
Я решил эту проблему, создав файл точки входа, как показано ниже:
// index.js
require = require('esm')(module)
module.exports = require('./app.js')
Теперь любые файлы, которые я импортировал внутри app.js
и далее, работают с import/export
. Запускать это можно через node index.js
.
Примечание: если app.js
использует export default
, тогда при использовании файла точки входа это будет выглядеть как require('./app.js').default
.
Чтобы использовать ES6, добавьте babel-preset-env
, а в вашем файле .babelrc
укажите следующее:
{
"presets": ["@babel/preset-env"]
}
Ответ обновлен благодаря комментарию @ghanbari о применении Babel 7.
Для установки пакетов Babel @babel/core
и @babel/preset-env
, которые позволяют конвертировать код ES6 в формат CommonJS, выполните следующую команду, так как Node.js не может напрямую исполнять код в формате ES6:
npm install --save-dev @babel/core @babel/preset-env
Затем необходимо создать конфигурационный файл с именем .babelrc
в корневом каталоге вашего проекта и добавить в него следующий код:
{
"presets": ["@babel/preset-env"]
}
Таким образом, вы сможете успешно использовать ES6-код в вашем проекте на Node.js.
Может ли выражение (a == 1 && a == 2 && a == 3) когда-либо оцениться как истинное?
Как клонировать объект JavaScript, исключив один ключ?
Соответствуют ли 'Стрелочные функции' и 'Функции' или они взаимозаменяемы?
Добавление тега script в React/JSX
Альтернативы переменным классов в ES6