Hay dos archivos js en mi directorio de trabajo.
Aquí está el contenido de test.js
let k; export default k = 12; Aquí está el contenido de test2.js
import m from './test'; console.log(m); Cuando traté de ejecutar test2.js con node.js (v17.3.0)
node test2.jsObtuve
import m from './test'; ^ SyntaxError: Unexpected identifier at Module._compile (internal/modules/cjs/loader.js:723:23) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) at Module.load (internal/modules/cjs/loader.js:653:32) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) at Function.Module._load (internal/modules/cjs/loader.js:585:3) at Function.Module.runMain (internal/modules/cjs/loader.js:831:12) at startup (internal/bootstrap/node.js:283:19) at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)El código de ejemplo proviene de MDN doc .
¿Estoy usando exportar correctamente?
Un par de problemas:
Está utilizando la sintaxis de ESM, pero el cargador CommonJS. Debe poner "type": "module" en su archivo package.json para decirle a Node.js que está usando ESM (o use una extensión de archivo .mjs ). Detalles en la documentación .
Ha dicho que está exportando la variable, pero no es así; está exportando un valor constante ( 12 , el resultado de k = 12 ) como exportación predeterminada. Para exportar la variable como la exportación predeterminada, usaría:
let k = 12; export default k; La distinción es que si exporta el resultado de k = 12 en lugar de k , las asignaciones posteriores a k dentro del módulo de exportación no actualizarán el valor del enlace importado.
Nota al margen: las exportaciones predeterminadas generalmente no son una gran idea. En su lugar, considere usar una exportación con nombre :
// Exporting: export let k = 12; // Importing: import {k as m} from "./test.js"; console.log(m); // 12 (initially, will change if `k` is changed)