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

242
Vistas
Exporte TS para admitir etiquetas ES6, CommonJS y HTML <script>

Estoy codificando una biblioteca TS que exporta un objeto como este:

 export const MyLibName: SDKExport = { ... }

Esta biblioteca se distribuirá en npm y quiero que otros puedan importarla independientemente de su configuración, es decir, debería poder usarse de las siguientes maneras:

 // ES6 import { MyLibName } from './myLib'; // CommonJS const { MyLibName } = require('./myLib'); // Browser <script src="https://cdn.jsdelivr.net/npm/myLib/dist/dist.min.js"></script> <script console.log(MyLibName) </script>

La parte del navegador está demostrando ser la más complicada, ya que requiere "contaminar" el espacio de nombres global con el objeto MyLibName . Puedo hacer eso, pero no tengo claro cómo hacerlo de una manera que no contamine el espacio de nombres global al importar la biblioteca explícitamente usando CommonJS/ES6.

Aquí está mi tsconfig.json:

 { "compilerOptions": { "lib": ["ES2019"], "module": "es6", "target": "es5", "moduleResolution": "node", "noUnusedLocals": true, "noUnusedParameters": true, "sourceMap": true, "outDir": "build", "strict": true, "noImplicitAny": true, }, "include": ["./**/*.ts"], "exclude": ["node_modules", ".vscode", "test"] }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Está claro que el script que está importando en el navegador debe ser diferente a su importación CommonJS/ES6 si desea que uno contamine el espacio de nombres global pero no el otro. Simplemente cree un archivo como este y use su paquete en él para crear una "compilación de navegador" de su biblioteca:

 import { MyLibName } from './myLib'; window.MyLibName = MyLibName;

(Parece que ya tiene un paquete/minificador en su proyecto, por lo que no entraré en detalles sobre cómo configurarlos).

about 4 years ago · Juan Pablo Isaza Denunciar

0

Intenté usar el enfoque sugerido por Vojtěch Strnad con browserify , pero encontré problemas que eran difíciles de depurar debido a todo el código adicional que browserify agrega a los archivos exportados. Acepto esa respuesta ya que es la correcta para bases de código complejas.

Para mi propio proyecto, que solo incluye un archivo, descubrí que funcionaba bien exportar el código TS usando el "module": "ES6" Opciones del compilador TS y ejecutar sed -i 's/\export //g' dist/index.js para eliminar la palabra clave de export . De esa forma, el archivo exportado simplemente tiene const MyLibName = { ... } y, por lo tanto, agrega el objeto al espacio de nombres global.

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