Agregué "tipo": "módulo" a paquete.json. Tenía la impresión de que no era necesaria una traducción entre ES6 y CommonJS con las versiones más nuevas del nodo para usar la importación, en este caso v16.0.0.
Tengo 3 archivos simples en el mismo directorio.
paquete.json
{ "name": "node_template", "version": "1.0.0", "description": "", "main": "main.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "type": "module" }Utilidad.js
'use strict'; class Utility { constructor() { } } export { Utility };principal.js
"use strict"; (async ()=>{ import { Utility } from './Utility.js'; var utility = new Utility(); console.log( "Main" ); })();Cuando ejecuto "node main.js" aparece el siguiente error:
node -v v16.0.0 node main.js main.js:4 import { Utility } from './Utility.js'; ^ SyntaxError: Unexpected token '{' ←[90m at Loader.moduleStrategy (node:internal/modules/esm/translators:147:18) ←[39m ←[90m at async link (node:internal/modules/esm/module_job:64:21)←[39mprincipal.js
(async () => { let { Utility } = await import('./Utility.js'); let utility = new Utility(); console.log('main'); })();Nota: La declaración de importación que usó solo debe usarse en el nivel superior del módulo. Pero puede importar el módulo de forma dinámica o condicional utilizando la importación dinámica - import (). Consulte los enlaces a continuación para obtener más detalles.
Enlaces: