node.js - usar - syntaxerror unexpected token import
Error de nodo: SyntaxError: importaciĆ³n de token inesperada (6)
1) Instalar los últimos preajustes
yarn add --dev babel-preset-latest
2) Cree
.babelrc
y agregue lo siguiente
{
"presets": ["latest"]
}
3) Ejecute su script
npx babel-node yourscript.js
O en su archivo
package.json
agregue
"scripts": {
"start": "babel-node index.js"
}
No entiendo lo que está mal. Revisé otro foro hablando sobre transpilación y babel. ¿Que tengo que hacer?
node -v
v5.5.0
mi código:
import recast from ''recastai''
y el error
(function (exports, require, module, __filename, __dirname) { import recast from ''module1''
^^^^^^
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:139:18)
at node.js:999:3
Empezando
Primero instalaremos babel-cli.
$ npm install --save-dev babel-cli
Junto con algunos presets.
$ npm install --save-dev babel-preset-es2015 babel-preset-stage-2
package.json:
"scripts": {
"start": "babel-node index.js --presets es2015,stage-2"
}
correr:
$ npm start
Observando los cambios de archivos con nodemon :
Podemos mejorar nuestro script de inicio npm con nodemon.
$ npm install --save-dev nodemon
Entonces podemos actualizar nuestro script de inicio npm.
package.json:
"scripts": {
"start": "nodemon index.js --exec babel-node --presets es2015,stage-2"
}
correr:
$ npm start
Si está utilizando pm2 , siga estos pasos:
$ pm2 start app.js --interpreter babel-node
En caso de que no quieras tratar con Babel. Este me funcionó.
const calc = require(''./my_calc'');
let {add, multiply} = calc;
Es muy simple resolver este problema,
import
es la sintaxis de ES6 y Node tiene dificultades para admitirlo, debe agregar
Babel
como transpiler, vaya a package.json y agregue lo siguiente
Primero agregue una etiqueta de script para usar babel mientras ejecuta el código JS para transpilar.
"scripts": {
"start": "nodemon ./app.js --exec babel-node -e js"
}
Y luego agregue lo siguiente como Babel devDependencies
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-stage-0": "^6.24.1"
}
después de esto, también debe configurar el archivo de presets de babel, por lo tanto, cree el archivo .babelrc en el directorio raíz y defina los presets de la siguiente manera
{
"presets": [
"es2015",
"stage-0"
]
}
No olvides hacer una
npm install
al final
Gracias a una
propuesta de mejora de NodeJS
tenemos un camino a seguir.
Puedes usar
@standard-things/esm
Encuentre el anuncio aquí Simplemente ejecute
npm i --save @std/esm
En su empaquetado hoy.
Las importaciones de ES6 son una característica recientemente introducida y la versión estable actual de Node aún no las admite. El rastreador de problemas de Node.js tiene un problema abierto para esto, pero hasta que V8 y Node agreguen soporte para esta característica, deberá usar un transpilador (el más popular es babel ) para poder usar las importaciones.
Para probar rápidamente la transpilación, babel proporciona un REPL basado en la web. Este demuestra que su código se está transpilando.
La babel apunta a los recursos relevantes para comenzar con Babel e integrarlo con su flujo de trabajo de desarrollo.
Para la configuración más simple, visite esta página de configuración y seleccione CLI en la sección incorporada de Babel.
Básicamente, esto implica tres pasos simples:
-
Instalar babel-cli:
npm install --save-dev babel-cli babel-preset-es2015
-
Cree el archivo de configuración
.babelrc
:echo ''{ "presets": ["es2015"] }'' > .babelrc
-
Use el módulo instalado para transpilar su código fuente:
./node_modules/.bin/babel src -d lib
La página de configuración mencionada también ilustra cómo agregar un script npm para simplificar el último paso. Alternativamente, puede integrar babel con su editor o cadena de compilación para que sus archivos se compilen automáticamente en caso de cambio.