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

291
Vistas
No se puede compilar una dependencia opcional de Node.js con el compilador Angular

Creé una biblioteca npm que contiene un código que se ve así:

 let _Buffer: typeof Buffer; let _require: NodeRequire; let _readFile: (path: string, callback: (err: (NodeJS.ErrnoException | null), data: Buffer) => void) => void; try { _Buffer = typeof Buffer !== undefined && Buffer; _require = typeof require !== undefined && require; if (_Buffer && _require) _readFile = _require('fs').readFile; } catch {}

Me las arreglé para hacer que partes del código anterior funcionen en otros proyectos, como la dependencia opcional en Buffer . El uso de require no era algo que hubiera probado antes, y esto es lo que ahora me está causando dolor. Angular está decidido a tratar de resolver la dependencia de fs , sin importar cómo intente ocultarlo (incluidas cosas tontas como _require('f' + 's') ), causando un error como este:

./node_modules/@tubular/astronomy/dist/fesm2015/index.js:3:300-4:1 - Error: Módulo no encontrado: Error: No se puede resolver 'fs' en '/Users/kshetline/programming_projects/svc -ng/node_modules/@tubular/astronomy/dist/fesm2015'

Lo que más me gustaría hacer es encontrar una manera de diseñar la biblioteca npm para que esto no sea un problema en absoluto.

Una solución menos satisfactoria sería encontrar una manera de decirle al compilador de Angular que ignore esta dependencia externa en particular. Sin embargo, ese es un tema difícil para Google, porque todas las búsquedas arrojan información sobre el sistema de inyección de dependencia Angular, no sobre este tipo de dependencia en tiempo de compilación.

El objetivo es permitir que la biblioteca tenga funciones adicionales de Node.js cuando se usa en un entorno de Node.js, pero aún así se ejecuta sin problemas en un navegador cuando esas funciones no están disponibles.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Interesante... mi código anterior en realidad funciona bastante bien para ocultar la dependencia de fs .

Lo que sucedió es que un intento anterior no tuvo éxito y, de alguna manera, en algún lugar de node_modules o package-lock.json o en el sistema de caché de IntelliJ IDEA o en el sistema de caché de Angular, la dependencia no deseada de fs se bloqueó y simplemente se instaló la biblioteca npm actualizada que anteriormente tenía la dependencia no lo estaba cortando.

Después de eliminar todas las fuentes sospechosas anteriores de la memoria no deseada de la mala dependencia, finalmente mi código se compilaría y ejecutaría.

Con un poco más de esfuerzo, se me ocurrió una versión mejorada del código, que funciona mejor con rollup y webpack, evitando la necesidad de declarar fs como una dependencia externa.

 let _Buffer: typeof Buffer; let _readFile: (path: string, callback: (err: (NodeJS.ErrnoException | null), data: Buffer) => void) => void; try { _Buffer = typeof Buffer !== undefined && Buffer; // eslint-disable-next-line no-new-func _readFile = !!_Buffer && (new Function('req', 'return req("fs").readFile'))(typeof require !== 'undefined' && require); } catch {}
about 4 years ago · Juan Pablo Isaza 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