Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

304
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda