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...)
