Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

310
Vistas
¿Por qué mecanografiado me permite importar dependencias que no puede usar en tiempo de ejecución?

Puede ver mi proyecto de muestra aquí: https://github.com/DanKaplanSES/typescript-stub-examples/tree/JavaScript-import-invalid

He creado este archivo llamado main.ts:

 import uuid from "uuid"; console.log(uuid.v4());

Aunque mecanografiado está bien con esta importación, cuando trato de node main.js , da este error:

 console.log(uuid_1["default"].v4()); ^ TypeError: Cannot read property 'v4' of undefined at Object.<anonymous> (C:\root\lib\main.js:5:31) ←[90m at Module._compile (internal/modules/cjs/loader.js:1063:30)←[39m ←[90m at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)←[39m ←[90m at Module.load (internal/modules/cjs/loader.js:928:32)←[39m ←[90m at Function.Module._load (internal/modules/cjs/loader.js:769:14)←[39m ←[90m at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)←[39m ←[90m at internal/main/run_main_module.js:17:47←[39m

Si cambio el archivo a esto, se ejecuta bien:

 import * as uuid from "uuid"; console.log(uuid.v4());

Si la primera versión no es válida, ¿por qué mecanografiado no me informa?

Tengo una configuración de tsconfig de varios archivos. Consulte el proyecto github para obtener más detalles, pero aquí están las opciones del compilador compartido que pueden ser relevantes:

 { "compilerOptions": { "rootDir": ".", "esModuleInterop": true, "module": "CommonJS", "moduleResolution": "node", "composite": true, "importHelpers": true, }, }

Así es como se ve main.js:

no funciona

 "use strict"; exports.__esModule = true; var tslib_1 = require("tslib"); var uuid_1 = tslib_1.__importDefault(require("uuid")); console.log(uuid_1["default"].v4());

obras

 "use strict"; exports.__esModule = true; var tslib_1 = require("tslib"); var uuid = tslib_1.__importStar(require("uuid")); console.log(uuid.v4());
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En primer lugar, estoy trabajando en el entorno del módulo ESM.

He estado luchando con el problema de la importación del paquete uuid varias veces en los últimos años.

Hoy volví a encontrarlo y encontré algo nuevo para mí y me gusta compartirlo con su excelente respuesta de análisis.

TL; DR: el comportamiento del import UUID from 'uuid' es diferente cuando el paquete uuid depende directa o indirectamente.

Creo que esto está relacionado con el comportamiento de ESM.

dependencia de package.json con uuid import * as UUID from 'uuid' import UUID from 'uuid'
directamente (tsc) OK OK
directamente (tiempo de ejecución) OK SyntaxError: The requested module 'uuid' does not provide an export named 'default'
indirectamente (tsc) OK Module "node_modules/@types/uuid/index" has no default export.ts(1192)
indirectamente (tiempo de ejecución) TypeError: UUID.v4 is not a function OK
  1. "dependencia directa con uuid " significa que tenemos un uuid en las dependencies de package.json
  2. "dependencia indirecta con uuid " significa que no tenemos uuid en las dependencies de package.json (pero otro módulo de dependencia lo ha incluido)

Conclusión

Parece que solo hay una situación en la que el sistema de escritura y el tiempo de ejecución funcionan como se espera con ESM: use una dependencia directa al paquete uuid .

Siempre npm install --save uuid . (ver mi problema aquí con confirmaciones)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda