Estoy tratando de escribir un paquete de JavaScript usando módulos ES (es decir, sintaxis de import / export ). Específicamente, el JavaScript se transpila desde TypeScript, usando la configuración sugerida en ¿Qué configuración de TypeScript produce una salida más cercana a las capacidades de Node.js 14?
Esto funciona bien en la última versión de Node 14, pero falla en el ejecutor base-14 en el orbe CircleCI de Cypress, que creo que usa Node 14.7.0. El error es un poco críptico:
internal/process/esm_loader.js:74 internalBinding('errors').triggerUncaughtException( ^ Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only file and data URLs are supported by the default ESM loader at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:781:11) at Loader.resolve (internal/modules/esm/loader.js:85:40) at Loader.getModuleJob (internal/modules/esm/loader.js:229:28) at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:51:40) at link (internal/modules/esm/module_job.js:50:36) { code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME' } Esto no dice qué estaba intentando cargar el cargador ESM predeterminado. Un ejemplo mínimo sería importar uno de los módulos integrados de Node como fs , que definitivamente existe:
package.json
{ "name": "demo", "version": "0.1.0", "type": "module", "scripts": { "start": "node index.js" } } index.js :
import fs from "node:fs";Confirmé que esto funciona en 14.20 pero falla en 14.7, aunque se supone que los módulos ES son compatibles con 14.0.
Para Node 14.13.0, el mensaje de error se ha vuelto mucho más claro:
Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only file and data URLs are supported by the default ESM loader. Received protocol 'node:' El node: Las importaciones de "espacio de nombres" con prefijo son, según los documentos , solo compatibles con Node 12.20.0 y 14.13.1. Si está escribiendo una biblioteca para admitir Node 14.0.0 y versiones posteriores, debe, por ejemplo, import fs from "fs"; .