Orijinal postere (@robsonrosa) benzer bir sorunum var. Benim durumumda bir dist
dizine derleyen typecript kullanıyorum . TypeScript'i kök dizine derleyebilsem de, en iyi çözümün package.json
dist dizininde ayrı bir dosya oluşturmak olduğunu düşünüyorum .
Bu, @scvnc'nin package.json
ama bir bükülme ile kopyalama önerisine benzer :
Paketleme işleminin bir parçası olarak, paket için kök dizindeki package.json
ana package.json
dosyaya dayalı ancak ondan farklı bir paket oluşturmalısınız.
Gerekçe:
- Kök
package.json
dosya, geliştirme dosyasıdır. Paket kullanıcısına faydası olmayan komut dosyaları veya geliştirme bağımlılıkları içerebilir, ancak sizin için güvenlik endişeleri oluşturabilir. Paketleme prosedürünüz, bu bilgileri üretimden çıkaran bir kod içerebilir package.json
.
- Paketinizi, farklı paket dosyaları gerektirebilecek farklı ortamlara dağıtmak isteyebilirsiniz (örneğin, farklı sürümlere veya bağımlılıklara sahip olmak isteyebilirsiniz).
--- DÜZENLE ---
Yorumlarda benden çözüm istendi. İşte kullandığım bazı kodlar. Bu bir örnek olarak düşünülmelidir, jenerik olması amaçlanmamıştır ve projelerime özgüdür.
Kurulumum:
package.json - main package.json with dev dependencies and useful scripts.
.npmignore - files to ignore; copied to 'dist' directory as part of the setup.
/src - directory where my typescript code resides.
/src/SetupPackage.ts - bit of code used to setup the package.
/dist - destination directory for the compiled javascript files.
Yalnızca dist
dizini paketlemek istiyorum ve dizin, paketteki kök dizin olmalıdır.
Dosya SetupPackage.ts
benim de src
dizine derlenmiş olacak SetupPackage.js
yılında dist
daktilo ile dizine:
import fs from "fs";
// DO NOT DELETE THIS FILE
// This file is used by build system to build a clean npm package with the compiled js files in the root of the package.
// It will not be included in the npm package.
function main() {
const source = fs.readFileSync(__dirname + "/../package.json").toString('utf-8');
const sourceObj = JSON.parse(source);
sourceObj.scripts = {};
sourceObj.devDependencies = {};
if (sourceObj.main.startsWith("dist/")) {
sourceObj.main = sourceObj.main.slice(5);
}
fs.writeFileSync(__dirname + "/package.json", Buffer.from(JSON.stringify(sourceObj, null, 2), "utf-8") );
fs.writeFileSync(__dirname + "/version.txt", Buffer.from(sourceObj.version, "utf-8") );
fs.copyFileSync(__dirname + "/../.npmignore", __dirname + "/.npmignore");
}
main();
Bu dosya:
- Kökü kopyalar,
package.json
ancak pakette gerekmeyen komut dosyalarını ve dev bağımlılıklarını kaldırır. Ayrıca pakete ana giriş noktasını da düzeltir.
- Adlı
package.json
dosyadan paketin sürümünü yazar version.txt
.
.npmignore
Paketi kökten kopyalar .
.Npmignore içeriği:
*.map
*.spec.*
SetupPackage.*
version.txt
Yani birim testleri (özellik dosyaları) ve typecript eşleme dosyalarının yanı sıra oluşturduğu SetupPackage.js
dosya ve dosya da yok sayılır version.txt
. Bu, temiz bir paket bırakır.
Son olarak, ana package.json
dosya, oluşturma sistemi tarafından kullanılmak üzere aşağıdaki komut dosyalarına sahiptir ( sh
kabuk olarak kullanıldığını varsayar ).
"scripts": {
"compile": "tsc",
"clean": "rm -rf dist",
"prebuildpackage": "npm run clean && npm run compile && node dist/SetupPackage.js",
"buildpackage": "cd dist && npm pack"
},
Paketi oluşturmak için derleme sistemi depoyu klonlar, yapar npm install
ve ardından aşağıdakileri çalıştırır npm run buildpackage
:
dist
Temiz bir derleme sağlamak için dizini siler .
- Daktilo kodunu javascript'e derler.
- Paketlemeye
SetupPackage.js
hazırlanan dosyayı yürütür dist
.
- CD'leri
dist
dizine aktarır ve paketi orada oluşturur.
version.txt
Dosyayı package.json'daki sürümü almanın ve depomu etiketlemenin kolay bir yolu olarak kullanıyorum . Bunu yapmanın sayısız başka yolu vardır veya sürümü otomatik olarak artırmak isteyebilirsiniz. Bunu çıkarın SetupPackage.ts
ve .npmignore
sizin için yararlı değilse