javascript - Angular 4 Tüketimi İçin Typescript 2.3 Modüllerini NPM'e Yayınlama
Typescript ile NPM modülleri yazma konusunda ilgili talimatlar var, ancak bunlar eskimiş ve şimdi Angular için işe yarayıp yaramayacak birçok farklı cevap var. Ayrıca Jason Aden tarafından YouTube'da Angular Bileşenlerini nasıl yayınlayacağınız hakkında çok iyi bir sunum var, ancak bu durumda ben sadece saf typescript sınıflarını yayınlamakla ilgileniyorum.
Cevap #1
Bunu test etmek için bir prototip tamamladım. TypeScript ile yazılmış npm modülleri oluşturmayı anlatan bu makaleden ve Jason Aden'in Packaging Angular Sunumu'ndaki rollup önerisinden kod kullandım.
Bunun tsconfig-cjs.json bölümü, sadece webpack ve Angular'ı desteklemenin yanı sıra commonjs + es5 iş akışlarını da desteklememiz için olduğunu unutmayın.
Github Deposu
TS Modül Üretici Projesi
Adımlar
Proje Kurulumu
mkdir tsmproducer
cd tsmproducer
Initialize the project's package.json
npm init -y
package.json'i değiştir:
{
"name": "tsmproducer",
"version": "1.0.0",
"description": "Example typescript npm project supporting es6 modules via the module package.json attribute as well as commonjs",
"main": "target/main/cjs/index.js",
"types": "target/main/esm/index.d.ts",
"module": "target/main/esm/fesm.js",
"scripts": {
"build-cjs": "rm -rf target/main/cjs && tsc -p tsconfig-cjs.json",
"build-esm": "rm -rf target/main/esm && tsc -p tsconfig-esm.json && rollup target/main/esm/index.js -o target/main/esm/fesm.js",
"build-all": "npm run build-cjs && npm run build-esm"
},
"keywords": [
"typescript",
"commonjs",
"npm",
"modules",
"es6",
"es2015",
"publishing",
"rollup",
"treeshaking"
],
"author": "Ole Ersoy",
"license": "MIT",
"devDependencies": {
"rollup": "^0.41.6",
"typescript": "^2.3.4"
}
}
Bağımlılıkları indir
npm i
npm i -g rollup
npm i -g typescript
Make typescript source directory
mkdir -p src/main/ts
ES6 ve CommonJS için TypeScript derleyici ayarları oluştur
tsconfig-esm.json
{
"compilerOptions": {
"declaration": true,
"module": "es2015",
"target": "es5",
"rootDir": "src/main/ts",
"outDir": "target/main/esm"
},
"exclude": [
"node_modules"
]
}
tsconfig-cjs.json
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"rootDir": "src/main/ts",
"outDir": "target/main/cjs"
},
"exclude": [
"node_modules"
]
}
Typescript test exportları oluştur:
src/main/ts/printSubtract.ts
export function printSubtract(...numbers: number[]) {
console.log(`Subtracting the numbers: ${numbers.join(', ')}`);
}
src/main/ts/printAdd.ts
export function printAdd(...numbers: number[]) {
console.log(`Adding the numbers: ${numbers.join(', ')}`);
}
src/main/ts/index.ts
export * from './printAdd';
export * from './printSubtract';
Derle
npm run build-all
Bir tüketici projesi oluştur
mkdir tsmconsumer (TS Module Consumer)
cd tsmconsumer
npm init -y
npm i ../tsmproducer
Bir modül tüketicisi oluştur
touch index.ts
index.ts dosyasında aşağıdakileri deneyin:
import {printAdd, printSubtract} from 'tsmproducer';
printAdd(1, 2);
printSubtract(2, 1);
Özet
- Rollup tarafından üretilen FESM (Düz EcmaScript modülü),
package.json's moduleözniteliği aracılığıyla açığa çıkarılır. - Typescript bildirim dosyaları üretilir ve
target/main/esmdizinine yerleştirilir vepackage.json'un typesözniteliği aracılığıyla sunulur. - CommonJS modül desteği,
package.json's mainözniteliği aracılığıyla etkinleştirilir.
