unexpected uncaught syntaxerror invalid error javascript node.js npm ecmascript-6

uncaught - unexpected token return javascript



Node.js-SyntaxError: importaciĆ³n de token inesperada (9)

A partir de Node.js v12 (y esto es probablemente bastante estable ahora, pero todavía marcado como "experimental"), tiene un par de opciones para usar ESM (Módulos de cripta E CMA S ) en Node.js (para archivos, hay un tercera forma de evaluar cadenas), esto es lo que dice la documentación :

El --experimental-modules se puede utilizar para habilitar la compatibilidad con los módulos ECMAScript (módulos ES).

Una vez habilitado, Node.js tratará lo siguiente como módulos ES cuando se pasa al node como la entrada inicial, o cuando se hace referencia a él mediante declaraciones de import dentro del código del módulo ES:

  • Archivos que terminan en .mjs .

  • Archivos que terminan en .js , o archivos sin extensión, cuando el archivo principal package.json más cercano contiene un "type" campo de nivel superior con un valor de "module" .

  • Las cadenas se pasan como argumento a --eval o --print , o se canalizan al node través de STDIN , con el indicador --input-type=module .

Node.js tratará como CommonJS todas las demás formas de entrada, como archivos .js donde el archivo package.json padre más cercano no contiene un campo de "type" nivel superior, o una entrada de cadena sin el indicador --input-type . Este comportamiento es para preservar la compatibilidad con versiones anteriores. Sin embargo, ahora que Node.js admite los módulos CommonJS y ES, es mejor ser explícito siempre que sea posible. Node.js tratará lo siguiente como CommonJS cuando se pase al node como entrada inicial, o cuando se haga referencia a él mediante declaraciones de import dentro del código del módulo ES:

  • Archivos que terminan en .cjs .

  • Archivos que terminan en .js , o archivos sin extensión, cuando el archivo principal package.json más cercano contiene un "type" campo de nivel superior con un valor de "commonjs" .

  • Las cadenas se pasan como argumento a --eval o --print , o se canalizan al node través de STDIN , con el indicador --input-type=commonjs .

No entiendo lo que 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


Como se menciona en otras respuestas, el nodo JS actualmente no admite importaciones ES6

(A partir de ahora, lea EDITAR 2)

Habilitar las importaciones de ES6 en el nodo js proporciona una solución a este problema. He cansado esto y funcionó para mí.

Ejecute el comando:

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

Ahora necesita crear un nuevo archivo (config.js) y agregarle el siguiente código.

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

Ahora puede escribir declaraciones de importación sin obtener ningún error.

Espero que esto ayude.

EDITAR:

Debe ejecutar el nuevo archivo que creó con el código anterior. En mi caso fue config.js . Entonces tengo que correr:

node config.js

EDITAR 2:

Mientras experimentaba, encontré una solución fácil para este problema.

Cree el archivo .babelrc en la raíz de su proyecto.

Agregue lo siguiente (y cualquier otro preajuste de babel que necesite, se puede agregar en este archivo):

{ "presets": ["env"] }

Instale babel-preset-env usando el comando npm install babel-preset-env --save , y luego instale babel-cli usando el comando npm install babel-cli -g --save

Ahora, vaya a la carpeta donde existe su servidor o archivo de índice y ejecútelo usando: babel-node fileName.js

O puede ejecutar usando npm start agregando el siguiente código a su archivo package.json :

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


Desafortunadamente, Node.js aún no admite la import de ES6.

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 el aprendizaje de Node.js.


En caso de que aún no pueda usar "importar", así es como lo manejé: solo traduzca a un nodo amigable requerido. Ejemplo:

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

Es lo mismo que:

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


En mi caso, estaba .babelrc archivo .babelrc , y debería contener algo como esto:

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


si puede usar ''babel'', intente agregar scripts de compilación en package.json (- presets = es2015) como se muestra a continuación. hace precompilar el código de importación a es2015

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


Actualización: en el Nodo 9 , se habilita detrás de una bandera y usa la extensión .mjs .

node --experimental-modules my-app.mjs

Si bien la import es parte de ES6, desafortunadamente todavía no se admite en NodeJS de forma predeterminada, y solo recientemente se ha admitido 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 los módulos ES6 en Node.js (febrero de 2017):

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

Hasta que el soporte se muestre de forma nativa, deberá continuar utilizando las declaraciones de require clásicas:

const express = require("express");

Si realmente desea utilizar las nuevas funciones de ES6 / 7 en NodeJS, puede compilarlo con Babel. Aquí hay un servidor de ejemplo .


Error: SyntaxError: importación de token inesperada o SyntaxError: exportación de token inesperada

Solución: cambie todas sus importaciones como ejemplo

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

Y también cambia tu export default = foo; a module.exports = foo;


La propuesta de Babel 7 puede agregar dependencias de desarrollo

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

y agregue un .babelrc en la raíz

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

y agregar al archivo .js

require("@babel/register")

o si lo ejecuta en el cli, puede usar el gancho require como -r @ babel / register, ej.

$node -r @babel/register executeMyFileWithESModules.js