Búsqueda de sitios web

node.js - Publicar clases de Typescript como paquete npm


He escrito un conjunto de clases de Typescript que estoy publicando como un módulo NPM en nuestro servidor de paquetes interno. Mis otros proyectos pueden recuperar esta dependencia usando NPM.

Me gustaría publicar las clases de tal manera que pueda importarlas haciendo referencia al paquete en sí, similar a algunos otros paquetes que estoy usando como Angular.

import { SomeClass } from 'mylibrary'

Esta es mi configuración actual:

He escrito un archivo ./mylibrary.d.ts:

export * from './dist/foldera/folderb'
//etc

./package.json:

"name": "mylibrary",
"main": "mylibrary.d.ts",
"files": [
  "mylibrary.d.ts",
  "dist/"
],
"types": "mylibrary.d.ts",
//ommitted other settings

src/tsconfig.json:

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "../dist/",
    "baseUrl": "src",
    "sourceMap": true,
    "declaration": true,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2016",
      "dom"
    ]
  }
}

Cuando intento importar el paquete usando la sintaxis deseada, MS VS Code dice que todo está bien, pero ejecutar mi proyecto resulta en un mensaje de error bastante críptico:

Module build failed: Error: Debug Failure. False expression: Output generation failed

Me siento perdido en la jerga de módulos, espacios de nombres y paquetes. Cualquier ayuda es muy apreciada.

Respuesta #1

Si colocas un archivo index.ts en la carpeta raíz de tu paquete (al mismo nivel que package.json), de manera que vuelva a exportar toda la funcionalidad de tu carpeta src/, entonces puedes publicarlo sin compilar a js, teniendo en cuenta que solo se usará en proyectos TS.

El lado negativo de este enfoque es que su paquete se compilará con su proyecto cada vez, y posibles cambios en el entorno de TS pueden llevar a la incapacidad de compilar todo el proyecto (por ejemplo, tengo problemas para compilar uno de mis paquetes en versiones < 2.4.2).

// index.ts
export { Class1 } from 'src/Class1'
export { Class2 } from 'src/Class2'

Artículos relacionados