Orijinal postere (@robsonrosa) benzer bir sorunum var. Benim durumumda bir distdizine derleyen typecript kullanıyorum . TypeScript'i kök dizine derleyebilsem de, en iyi çözümün package.jsondist dizininde ayrı bir dosya oluşturmak olduğunu düşünüyorum .
Bu, @scvnc'nin package.jsonama bir bükülme ile kopyalama önerisine benzer :
Paketleme işleminin bir parçası olarak, paket için kök dizindeki package.jsonana package.jsondosyaya dayalı ancak ondan farklı bir paket oluşturmalısınız.
Gerekçe:
- Kök
package.jsondosya, 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 distdizini paketlemek istiyorum ve dizin, paketteki kök dizin olmalıdır.
Dosya SetupPackage.tsbenim de srcdizine derlenmiş olacak SetupPackage.jsyılında distdaktilo 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.jsonancak 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.jsondosyadan paketin sürümünü yazar version.txt.
.npmignorePaketi 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.jsdosya ve dosya da yok sayılır version.txt. Bu, temiz bir paket bırakır.
Son olarak, ana package.jsondosya, oluşturma sistemi tarafından kullanılmak üzere aşağıdaki komut dosyalarına sahiptir ( shkabuk 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 installve ardından aşağıdakileri çalıştırır npm run buildpackage:
distTemiz bir derleme sağlamak için dizini siler .
- Daktilo kodunu javascript'e derler.
- Paketlemeye
SetupPackage.jshazırlanan dosyayı yürütür dist.
- CD'leri
distdizine aktarır ve paketi orada oluşturur.
version.txtDosyayı 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.tsve .npmignoresizin için yararlı değilse