it-swarm.com.ru

Node.js - SyntaxError: Неожиданный импорт токена

Я не понимаю, что не так. Node v5.6.0 NPM v3.10.6

Код:

function (exports, require, module, __filename, __dirname) {
    import express from 'express'
};

Ошибка:

SyntaxError: Unexpected token import
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:387:25)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:140:18)
    at node.js:1001:3
325
SofDroid

Обновление: В Узел 9 оно включено за флагом и использует расширение .mjs.

node --experimental-modules my-app.mjs

Хотя import действительно является частью ES6, к сожалению, по умолчанию он еще не поддерживается в NodeJS и только недавно получил поддержку в браузерах.

Смотрите таблица сравнения браузеров в MDN и эта проблема Node .

Из сообщения Джеймса М. Снелла Обновление модулей ES6 в Node.js (февраль 2017 г.):

Работа продолжается, но это займет некоторое время - в настоящее время мы рассматриваем как минимум год.

Пока поддержка не появится изначально, вам нужно будет продолжать использовать классические операторы require:

const express = require("express");

Если вы действительно хотите использовать новые функции ES6/7 в NodeJS, вы можете скомпилировать его с помощью Babel. Вот пример сервера .

367
Scimonster

К сожалению, Node.js пока не поддерживает import в ES6.

Чтобы выполнить то, что вы пытаетесь сделать (импортировать модуль Express), этого кода должно хватить

var express = require("express");

Также убедитесь, что у вас установлен Express, запустив

$ npm install express

См. Node.js Docs для получения дополнительной информации об изучении Node.js.

48
baranskistad

Ошибка: SyntaxError: неожиданный токен импорт или SyntaxError: неожиданный токен экспорт


Решение: Измените весь ваш импорт как пример

const express                               = require('express');
const webpack                           = require('webpack');
const path                              = require('path');
const config                            = require('../webpack.config.dev');
const open                              = require('open');

А также измените свой export default = foo; на module.exports = foo;

30
supritshah1289

Как упоминалось в других ответах Node JS в настоящее время не поддерживает импорт ES6

(На данный момент читайте РЕДАКТИРОВАТЬ 2)

Включить импорт ES6 в узле js предоставляет решение этой проблемы. Я устал от этого, и это сработало для меня.

Запустите команду:

    npm install babel-register babel-preset-env --save-dev

Теперь вам нужно создать новый файл (config.js) и добавить в него следующий код.

    require('babel-register')({
        presets: [ 'env' ]
    })
    // Import the rest of our application.
    module.exports = require('./your_server_file.js')

Теперь вы можете писать операторы импорта без ошибок.

Надеюсь это поможет.

EDIT:

Вам нужно запустить новый файл, который вы создали с кодом выше. В моем случае это был config.js. Так что я должен бежать:

    node config.js

РЕДАКТИРОВАТЬ 2:

Экспериментируя, я нашел одно простое решение этой проблемы.

Создайте файл .babelrc в корне вашего проекта.

Добавьте следующее (и любые другие предустановки Babel, которые вам нужны, можно добавить в этот файл):

    {
        "presets": ["env"]
    }

Установите babel-preset-env с помощью команды npm install babel-preset-env --save, а затем установите babel-cli с помощью команды npm install babel-cli -g --save

Теперь перейдите в папку, где находится ваш сервер или индексный файл, и запустите с помощью: babel-node fileName.js

Или вы можете запустить, используя npm start, добавив следующий код в ваш файл package.json:

    "scripts": {
        "start": "babel-node src/index.js"
    }
17
Nirali Acharya

Если вы до сих пор не можете использовать "импорт", вот как я справился: просто переведите его в дружественный узел. Пример:

import { parse } from 'node-html-parser';

Такой же как:

const parse = require('node-html-parser').parse;
9
Alberto

если вы можете использовать 'babel', попробуйте добавить сценарии сборки в package.json (- presets = es2015), как показано ниже. это сделать, чтобы прекомпилировать код импорта в es2015

"build": "babel server --out-dir build --presets=es2015 && webpack"
8
ASTOMUSIC

предложение babel 7 вы можете добавить зависимости dev

npm i -D @babel/core @babel/preset-env @babel/register

и добавьте .babelrc в корень

{
"presets": [
  [
    "@babel/preset-env",
    {
      "targets": {
        "node": "current"
     }
    }
  ]
 ]
}

и добавьте в файл .js

require("@babel/register")

или если вы запустите его в cli, вы можете использовать крючок require как -r @ babel/register, ex.

$node -r @babel/register executeMyFileWithESModules.js
2
Jason Ashley

В моем случае это был файл .babelrc, и он должен содержать что-то вроде этого:

{
  "presets": ["es2015-node5", "stage-3"],
  "plugins": []
}
1
Ghita Tomoiaga