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

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

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 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!