Búsqueda de sitios web

javascript - archivo index.d.ts no publicado en NPM


Creé un paquete en Typescript y lo publiqué en NPM. He configurado declaration: true en tsconfig.json de este proyecto de paquete. Cuando construyo este proyecto, el compilador de TS genera los archivos .d.ts como se espera, sin embargo, estos archivos no se publican en NPM y, como resultado, cuando instalo este paquete en otro proyecto, obtengo el error, No se puede encontrar el módulo 'projectname-common' o sus declaraciones de tipo correspondientes.

Aquí está mi archivo package.json:

{
  "name": "@Organisation/lib",
  "version": "1.0.0",
  "description": "",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "scripts": {
    "clean": "rm -rf ./dist",
    "build": "npm run clean && npx tsc",
    "pub": "git add . && git commit -m \"Changes\" && git push && npm version patch && npm run build && npm publish --access public"
  },
  "keywords": [],
  "author": "Author",
  "license": "ISC",
  "devDependencies": {
    //removed
  },
  "dependencies": {
    //removed
  }
}

Aquí está mi archivo tsconfig.json:

{
    "compilerOptions": {
      "target": "es6",                                /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
      "module": "commonjs",                           /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
      "declaration": true,                         /* Generates corresponding '.d.ts' file. */
      "sourceMap": true,                           /* Generates corresponding '.map' file. */
      "outDir": "dist",                              /* Redirect output structure to the directory. */
      "strict": true,                                 /* Enable all strict type-checking options. */
      "noImplicitAny": true,                       /* Raise error on expressions and declarations with an implied 'any' type. */
      "moduleResolution": "node",                  /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
      "baseUrl": "./",                             /* Base directory to resolve non-absolute module names. */
      "paths": {
        "*": ["*"]
      },                                 /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
      "allowSyntheticDefaultImports": true,        /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
      "esModuleInterop": true,                        /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
      "skipLibCheck": true,                           /* Skip type checking of declaration files. */
      "forceConsistentCasingInFileNames": true        /* Disallow inconsistently-cased references to the same file. */
    },
    "include": [
      "src/**/*"
    ]
  }

Aquí está mi archivo .gitignore:

lib-cov
*.seed
*.log
*.csv
*.dat
*.out
*.pid
*.gz
*.swp

pids
logs
results
tmp

Build
public/css/main.css

Coverage reports
coverage

API keys and secrets
.env

Dependency directory
node_modules
bower_components

Editors
.vscode
.idea
*.iml

OS metadata
.DS_Store
Thumbs.db

Ignore built ts files
dist/**/*

ignore yarn.lock
yarn.lock

**.log.**

Nota: aunque dist esté incluido en .gitignore, el archivo dist/index.js se publica en NPM pero ninguno de los archivos .d.ts lo está.

La estructura del directorio es así:

my-package/
├─ node_modules/
├─ dist/
│  ├─ models/
│  ├─ index.d.ts
│  ├─ index.js
│  ├─ index.js.map
├─ src/
│  ├─ models
│  ├─ index.ts
├─ .gitignore
├─ package.json
├─ tsconfig.json

Respuesta #1

Necesitas usar la clave files, de esa manera solo las cosas en el arreglo files serán publicadas en npm, y no necesitas .npmignore

ejemplo :

  "main": "dist/cjs/index.js",
  "module": "dist/esm/untilted.esm.js",
  "unpkg": "dist/unpkg/untilted.js",
  "types": "dist/types/",
  "files": [
    "dist",
    "src"
  ],

En este ejemplo, el directorio dist contiene todos los archivos compilados, y src contiene el código fuente (necesario para los mapas de origen). Y eso es todo lo que se va a publicar en npm además de algunos archivos que siempre se incluyen (package.json, README, LICENCE, etc...)

Artículos relacionados