bundler - Hur man kompilerar ett TypeScript-bibliotek till .mjs och inkluderar d.ts?
tsc fungerar nästan men jag kan inte få det att generera .mjs-filer. swc vill inte generera .mjs eller .d.ts-filerna.
Finns det en omfattande paketförpackare som kan göra båda?
Idealiskt vill jag rikta det mot min index.ts-fil som ser ut så här
export * from './map'
export * from './set'
export * from './array'
Och sedan kommer det att hitta de andra filerna och kompilera dem. Allt som inte finns i import/export-kedjan bör uteslutas från output, men om jag måste kompilera hela min src-katalog kan jag leva med det.
Ytterligare begränsningar:
Den kompilerade JS bör inkludera filändelser i sina import-/export-satser: https://stackoverflow.com/a/68783000/65387
- Jag vill inte inkludera
.jsi min källa kod när jag försöker importera en.tsfil (https://stackoverflow.com/a/62626938/65387)
- Jag vill inte inkludera
Jag tror att jag kan kringgå filändelsen .mjs genom att lägga till "type": "module" i package.json. Men jag behöver fortfarande att import-/export-satserna skrivs om korrekt (med filtillägg).
Svar #1
OK, jag tror att jag förstår. Svaret är Rollup.
yarn add --dev rollup @rollup/plugin-typescript @rollup/plugin-terser tslib
// rollup.config.js
import typescript from '@rollup/plugin-typescript';
import terser from '@rollup/plugin-terser';
export default {
input: 'src/index.ts',
output: {
dir: 'dist',
format: 'esm',
entryFileNames: '[name].mjs'
},
plugins: [
typescript(),
terser({
format: {
comments: 'some',
beautify: true,
ecma: '2022',
},
compress: false,
mangle: false,
module: true,
}),
]
};
// package.json
{
"name": "@you/your-package",
"version": "0.1.11",
"packageManager": "[email ",
"main": "dist/index.mjs",
"type": "module",
"types": "dist/index.d.ts",
"files": [
"/dist"
],
"scripts": {
"build": "rollup -c",
"test": "jest --silent=false",
"publish-patch": "npm version patch && hg ci -m \"Publish v$(jq -r '.version' package.json)\" && npm publish"
},
"devDependencies": {
"@rollup/plugin-terser": "^0.2.1",
"@rollup/plugin-typescript": "^10.0.1",
"@types/jest": "^29.2.4",
"jest": "^29.3.1",
"rollup": "^3.9.0",
"ts-jest": "^29.0.3",
"tslib": "^2.4.1",
"typescript": "^4.9.4"
}
}
Det kommer att generera filer med .mjs-ändelse och inkludera .d.ts-filerna och utelämna annat skräp i din src-mapp som testfiler.
Terser behövs om du vill ta bort kommentarer från utdata. Bytet av filändelse för import/export är inte längre relevant eftersom Rollup insisterar på att endast outputta en enda fil.
tslib behövs för att göra rollup glad. Det samma gäller type: "module" även om TS inte bryr sig, och det gör inte Node heller om du använder .mjs-ändelsen.
