Node.js - Error de sintaxis: importación de token inesperada

Resuelto SofDroid asked hace 8 años • 18 respuestas

No entiendo qué está mal. Nodo v5.6.0 NPM v3.10.6

El código:

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

El error:

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
SofDroid avatar Sep 11 '16 19:09 SofDroid
Aceptado

Nodo 13+ Desde el Nodo 13 , puede usar la .mjsextensión o configurarla {"type": "module"}en su paquete.json. No es necesario utilizar la --experimental-modulesbandera. Los módulos ahora están marcados como estables en node.js

Nodo 12 Desde el Nodo 12 , puede usar la .mjsextensión o configurarla "type": "module"en su paquete.json. Y necesitas ejecutar el nodo con la --experimental-modulesbandera.

Nodo 9 En el Nodo 9 , está habilitado detrás de una bandera y usa la .mjsextensión.

node --experimental-modules my-app.mjs

Si bien importes parte de ES6, desafortunadamente aún no es compatible con NodeJS de forma predeterminada y solo recientemente ha conseguido soporte en los navegadores.

Consulte la tabla de compatibilidad del navegador en MDN y este problema de Nodo .

De la actualización de James M Snell sobre módulos ES6 en Node.js (febrero de 2017):

El trabajo está en progreso, pero llevará algún tiempo; actualmente estamos considerando al menos alrededor de un año.

Hasta que el soporte aparezca de forma nativa ( ahora marcado como estable en el Nodo 13+ ), tendrás que continuar usando requiredeclaraciones clásicas :

const express = require("express");

Si realmente desea utilizar las nuevas funciones de ES6/7 en NodeJS, puede compilarlo usando Babel. A continuación se muestra un servidor de ejemplo .

Scimonster avatar Sep 11 '2016 13:09 Scimonster

Desafortunadamente, Node.js aún no es compatible con ES6 import.

Para lograr lo que está intentando hacer (importar el módulo Express), este código debería ser suficiente

var express = require("express");

Además, asegúrese de tener Express instalado ejecutando

$ npm install express

Consulte los documentos de Node.js para obtener más información sobre cómo aprender Node.js.

baranskistad avatar Sep 11 '2016 13:09 baranskistad

Me sorprende esmque no lo hayan mencionado. Este pequeño pero potente paquete le permite utilizar importo require.

Instala esm en tu proyecto

$ npm install --save esm

Actualice su secuencia de comandos de inicio de nodo para usar esm

node -r esm app.js

esmsimplemente funciona. Perdí MUCHO tiempo .mjsy --experimental-modulessolo descubrí que un .mjsarchivo no puede importar un archivo que use requireo module.exports. Esto fue un gran problema, mientras que esmte permite mezclar y combinar y simplemente lo resuelve... esmsimplemente funciona.

thedanotto avatar Oct 24 '2019 13:10 thedanotto