Estoy tratando de construir mi proyecto con babel y el nodo de destino 14.15.4
Mi .babelrc es así
{ "presets": [ [ "@babel/preset-env", { "targets": { "node": true } } ] ] } Así que esperaba que la salida de babel fuera compatible con el nodo actual. Desafortunadamente, la salida de babel sigue usando la sintaxis require en lugar de import , por lo que no se puede ejecutar con el nodo 14, eso arroja un error
require("./server.js"); ^ ReferenceError: require is not defined at file:///Users/grzegorz/Projects/charts/server/dist/index.js:3:1 at ModuleJob.run (internal/modules/esm/module_job.js:152:23) at async Loader.import (internal/modules/esm/loader.js:166:24) at async Object.loadESM (internal/process/esm_loader.js:68:5)¿Alguna idea de lo que estoy haciendo mal?
Lo siguiente le dirá a babel que no transforme módulos:
{ "presets": [ [ "@babel/preset-env", { "targets":{"node":"14"}, "modules": false, } ] ] } El código de los módulos producidos en esta mansión no contendrá pegamento interoperativo. "modules": false es la clave para esto. Sin él, babel insiste mucho en trans-apilar a la sintaxis compatible con CommonJS. Esta opción deshabilita todas las transformaciones de sintaxis del módulo. Esta opción deja caer el pegamento de compatibilidad y requiere uso.
Tipo: cadena | "actual" | verdadero.
Si desea compilar contra la versión actual del nodo, puede especificar "node": true o "node": "current", que sería lo mismo que "node": process.versions.node .
Ejemplo 1
{ "targets": "current" }ejemplo:2
{ "targets": true }ejemplo:3
{ "targets": "process.versions.node" }Alternativamente, puede especificar la versión del nodo en una consulta de lista de navegadores:
{ "targets": "node 12" // not recommended } { "targets": "node 12.0" }