Node.js – SyntaxError: Unerwarteter Token-Import

Lesezeit: 7 Minuten

Nodejs – SyntaxError Unerwarteter Token Import
SofDroid

Ich verstehe nicht, was falsch ist. Knoten v5.6.0 NPM v3.10.6

Der Code:

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

Der Fehler:

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

  • Verwenden Sie Transpiler wie Babel, um den Import in Nodejs zu verwenden, da er in nodejs nicht nativ unterstützt wird. Es gibt die beste Importalternative, die erforderlich ist, also gehen Sie damit.

    – BHUVNESH KUMAR

    8. September 2017 um 14:40 Uhr

  • Checkout-Unterstützung für den Import () von nodejs v16 – nodejs.org/api/packages.html

    – Mensch

    26. April 2021 um 4:13 Uhr


1646642717 938 Nodejs – SyntaxError Unerwarteter Token Import
Scimonster

Knoten 13+ Seit Knoten 13Sie können entweder die verwenden .mjs Erweiterung oder Satz {"type": "module"} in Ihrer package.json. Sie nicht müssen die verwenden --experimental-modules Flagge. Module ist jetzt in node.js als stabil markiert

Knoten 12 Seit Knoten 12Sie können entweder die verwenden .mjs Erweiterung oder Satz "type": "module" in Ihrer package.json. Und Sie müssen den Knoten mit dem ausführen --experimental-modules Flagge.

Knoten 9 Im Knoten 9es ist hinter einem Flag aktiviert und verwendet die .mjs Verlängerung.

node --experimental-modules my-app.mjs

Während import ist in der Tat Teil von ES6, es wird leider noch nicht standardmäßig in NodeJS unterstützt und hat erst vor kurzem Unterstützung in Browsern gefunden.

Sehen Browser-Kompatibilitätstabelle auf MDN und dieses Node-Problem.

Von James M Snell Update zu ES6-Modulen in Node.js (Februar 2017):

Die Arbeiten sind im Gange, aber es wird einige Zeit dauern – wir rechnen derzeit mit mindestens einem Jahr.

Bis die Unterstützung nativ angezeigt wird (jetzt in Knoten 13+ als stabil markiert), Sie müssen Classic weiterhin verwenden require Aussagen:

const express = require("express");

Wenn Sie wirklich neue ES6/7-Funktionen in NodeJS verwenden möchten, können Sie es mit Babel kompilieren. Hier ist ein Beispielserver.

  • Weiß jemand, ob Knoten 10 standardmäßig mit aktivierter Unterstützung ausgeliefert wird? (erscheint nächsten Monat)

    – Hartmut

    30. März 2018 um 14:26 Uhr

  • @Scimonster……node –experimental-modules my-app.mjs (node:12176) ExperimentalWarnung: Der ESM-Modullader ist experimentell. { Fehler: Modul /C:/Users/WittyParrot/Documents/card-test-project/src/my-app.mjs kann bei der Suche nicht gefunden werden (internal/modules/esm/DefaultResolve.js:23:12)test-project/ src/my-app.mjs bei der Suche (internal/modules/esm/DefaultResolve.js:23:12)….das Ausgeben einer Warnung konnte my-app.js nicht finden….bitte vorschlagen….i installierte Knotenversion 9.11.1

    – Löwe

    24. April 2018 um 10:22 Uhr


  • Erfordert immer noch ein Flag in v12 nodejs.org/api/esm.html#esm_ecmascript_modules

    – ABabin

    1. Mai 2019 um 19:19 Uhr

  • Scheint, dass Node v13.2.0 keine ES-Module als „.js“ importieren oder importieren kann, es sei denn, es gibt eine package.json mit dem Typ: module irgendwo darüber. esm ist in diesen Fällen immer noch nützlich.

    – jiku

    4. Dezember 2019 um 4:16 Uhr


  • Off-Topic, aber ich kann Knoten 14 nicht installieren, da er Windows 7 nicht mehr unterstützt. Es ist traurig, dass ich mein Betriebssystem aktualisieren muss, wenn ich volle Unterstützung für den Import/Export ohne Flags haben möchte.

    – Lajos Mészáros

    27. Mai 2020 um 22:52 Uhr

Nodejs – SyntaxError Unerwarteter Token Import
baranskistad

Leider unterstützt Node.js keine ES6 import noch.

Um das zu erreichen, was Sie versuchen (das Express-Modul importieren), sollte dieser Code ausreichen

var express = require("express");

Stellen Sie außerdem sicher, dass Sie Express installiert haben, indem Sie es ausführen

$ npm install express

Siehe die Node.js-Dokumentation für weitere Informationen zum Erlernen von Node.js.

  • import ist nicht unbedingt ein Feature von TypeScript. TypeScript ist ES6 mit Typisierungen. Dinge wie der Import sind also ES6-nativ.

    – Borislemke

    16. November 2016 um 6:11 Uhr

  • Node unterstützt dies jetzt nativ, sodass diese Antwort veraltet ist

    – Liam

    2. März 2021 um 8:54 Uhr

Ich bin geschockt esm wurde nicht erwähnt. Mit diesem kleinen, aber mächtigen Paket können Sie beides verwenden import oder require.

Installieren Sie esm in Ihrem Projekt

$ npm install --save esm

Aktualisieren Sie Ihr Knotenstartskript, um esm zu verwenden

node -r esm app.js

esm funktioniert einfach. Ich habe eine Menge Zeit damit verschwendet .mjs und --experimental-modules nur um herauszufinden, a .mjs file kann keine Datei importieren, die verwendet require oder module.exports. Dies war ein großes Problem, während esm ermöglicht es Ihnen, zu mischen und anzupassen, und es findet es einfach heraus … esm funktioniert einfach.

  • Wie verwende ich esm zum Debuggen mit dem Visual Studio Code-Debugger? Ich möchte F5 drücken und direkt mit dem Debuggen von js in VSCode beginnen.

    – paschut

    6. September 2020 um 18:29 Uhr


  • Wenn Sie nodemon verwenden, aktualisieren Sie Ihr npm-Skript auf nodemon -r esm app.js um mit dieser Lösung automatische Nachladungen zu erhalten.

    – Jesse Q

    10. September 2020 um 5:26 Uhr

  • Beeindruckend. Ich habe nicht geglaubt, dass dies wahr ist, aber es ist so.

    – Digitalextremist

    8. März 2021 um 18:44 Uhr

1646642719 379 Nodejs – SyntaxError Unerwarteter Token Import
Neerali Acharya

Wie in anderen Antworten erwähnt, unterstützt Node JS derzeit keine ES6-Importe.

(Lesen Sie ab sofort EDIT 2)

Aktivieren Sie ES6-Importe in Node js bietet eine Lösung für dieses Problem. Ich habe das ausprobiert und es hat bei mir funktioniert.

Führen Sie den Befehl aus:

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

Jetzt müssen Sie eine neue Datei (config.js) erstellen und ihr den folgenden Code hinzufügen.

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

Jetzt können Sie Importanweisungen schreiben, ohne dass Fehler auftreten.

Hoffe das hilft.

BEARBEITEN:

Sie müssen die neue Datei ausführen, die Sie mit dem obigen Code erstellt haben. In meinem Fall war es config.js. Also muss ich laufen:

    node config.js

BEARBEITEN 2:

Beim Experimentieren fand ich eine einfache Lösung für dieses Problem.

Schaffen .babelrc Datei im Stammverzeichnis Ihres Projekts.

Fügen Sie Folgendes hinzu (und alle anderen Babel-Voreinstellungen, die Sie benötigen, können in dieser Datei hinzugefügt werden):

    {
        "presets": ["env"]
    }

Installieren babel-preset-env Befehl verwenden npm install babel-preset-env --saveund dann installieren babel-cli Befehl verwenden npm install babel-cli -g --save

Gehen Sie nun zu dem Ordner, in dem sich Ihre Server- oder Indexdatei befindet, und führen Sie sie aus mit: babel-node fileName.js

Oder Sie können mit laufen npm start indem Sie den folgenden Code zu Ihrer hinzufügen package.json Datei:

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

Nodejs – SyntaxError Unerwarteter Token Import
supritshah1289

Fehler: SyntaxError: Unerwartetes Token importieren oder SyntaxError: Unerwartetes Token Export


Lösung: Ändern Sie alle Ihre Importe als Beispiel

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

Und ändern Sie auch Ihre export default = foo; zu module.exports = foo;

  • Ich wünschte, Sie hätten den Export-Standardteil etwas ausführlicher erklärt. Ich habe Probleme mit dem Teil. Der Import funktioniert mit Ihrer Antwort hervorragend.

    – JoeGalind

    24. Februar 2018 um 23:26 Uhr

  • Es gibt eine Antwort vor meiner Antwort, die eine Erklärung hat. Aber zur Klarstellung unterstützt Node keine ES6-Syntax. Wenn Sie “Importieren” sagen, verwenden Sie die ES6-Syntax

    – supritshah1289

    26. Februar 2018 um 0:40 Uhr

Verwenden der Ajax Methode von jQuery zum Abrufen von Bildern als
Alberto

Falls Sie “Import” immer noch nicht verwenden können, habe ich es folgendermaßen gehandhabt: Übersetzen Sie es einfach in eine knotenfreundliche Anforderung. Beispiel:

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

Ist das gleiche wie:

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

  • Ich wünschte, Sie hätten den Export-Standardteil etwas ausführlicher erklärt. Ich habe Probleme mit dem Teil. Der Import funktioniert mit Ihrer Antwort hervorragend.

    – JoeGalind

    24. Februar 2018 um 23:26 Uhr

  • Es gibt eine Antwort vor meiner Antwort, die eine Erklärung hat. Aber zur Klarstellung unterstützt Node keine ES6-Syntax. Wenn Sie “Importieren” sagen, verwenden Sie die ES6-Syntax

    – supritshah1289

    26. Februar 2018 um 0:40 Uhr

babel 7 vorschlag
können Sie Entwicklerabhängigkeiten hinzufügen

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

und fügen Sie eine .babelrc im Stammverzeichnis hinzu

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

und zur .js-Datei hinzufügen

require("@babel/register")

oder wenn Sie es in der CLI ausführen, können Sie den require-Hook als -r @babel/register verwenden, z.

$node -r @babel/register executeMyFileWithESModules.js

  • Das Installieren von @babel/preset-env und das Hinzufügen zu .babelrc hat den Trick gemacht. In meinem Fall ist das Plugin @babel/register nicht erforderlich.

    – Marcos R

    14. Juni 2019 um 19:28 Uhr

964500cookie-checkNode.js – SyntaxError: Unerwarteter Token-Import

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy