node.js - TypeScript ile node_modules'i çıktı dizinine nasıl dahil ederim
tsc komutunu çalıştırdıktan sonra node_modules klasörünü çıktı dizinine kopyalamanın mümkün olup olmadığını bilmek istiyorum.
Durumum şu: Bir TypeScript projem var ve bazı npm paketlerini kullanıyorum. Ve çıktım dizininde tüm npm bağımlılıklarının olmasına ihtiyacım var, çünkü bunu sıkıştırıp HTTP üzerinden göndermem gerekiyor (AWS Lambda'ya).
Proje yapım şöyle:
|-.vscode --> visual studio code
|-lib --> output dir
|-node_modules --> npm dependencies
|-src --> .ts files
|-jsconfig.json
|-tsconfig.json
Bunu nasıl başarabilirim?
Çok teşekkürler!
Cevap #1
Peopleware'ın çözümünü kabul edilmiş çözüme göre çok daha fazla beğeniyorum, ama bunun için gulp'a bile gerek yok. Bunu package.json dosyanızda basitçe yapabilirsiniz:
{
"scripts": {
"build": "tsc <your command line options>",
"postbuild": "cp package.json dist/package.json && cd dist && npm install --only=production"
}
}
Bunu bu şekilde yapmanın faydası, node_modules klasörünüzün tamamını kopyalamamanızdır; çünkü bu klasörde sadece geliştirme sırasında kullanılan birçok bağımlılık olabilir.
Bunu, görseller gibi statik varlıklarla veya benzerleriyle de yapabilirsiniz:
"copy-statics": "cp -r static dist/static"
Güncelleme: npm install --only-production kullanmak yerine, hem package.json hem de package-lock.json dosyalarını kopyalamak ve ardından npm ci --production çalıştırmak daha güvenlidir. Bu, yalnızca package-lock.json dosyanızda bulunan bağımlılık anlık görüntüsünü yüklemenizi sağlar. Yani komut şu şekilde görünecektir:
"postbuild": "cp package*.json dist && cd dist && npm ci --production"
Cevap #2
Sadece dizini cp ile kopyalayabilmelisiniz. Bunu otomatikleştirmek isterseniz, tsc ve cp çağrılarını package.json dosyanızdaki npm script'lerine sarabilirsiniz:
{
"scripts": {
"build": "tsc <your command line options>",
"postbuild": "cp -R node_modules lib/node_modules"
}
}
Sonra npm run build kullandığınızda cp komutunuz da otomatik olarak çalışmalıdır.
