Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

303
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!