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.

İlgili makaleler