Ich habe ein ähnliches Problem wie das Originalposter (@robsonrosa). In meinem Fall verwende ich typecript, das in ein dist
Verzeichnis kompiliert wird . Obwohl ich Typoskript in das Stammverzeichnis kompilieren lassen könnte, denke ich, dass die beste Lösung darin besteht, eine separate package.json
Datei im dist-Verzeichnis zu generieren .
Dies ähnelt dem Vorschlag von @scvnc, das zu kopieren, package.json
jedoch mit einer Wendung:
Als Teil des Verpackungsprozesses sollten Sie eine package.json
für das Paket generieren , die auf der Hauptdatei package.json
im Stammverzeichnis basiert, sich jedoch von dieser unterscheidet
Das Grundprinzip:
- Die Stammdatei
package.json
ist die Entwicklungsdatei. Es kann Skripte oder Entwicklungsabhängigkeiten enthalten, die für den Paketbenutzer nicht von Nutzen sind, aber Sicherheitsbedenken für Sie aufwerfen können. Ihr Verpackungsverfahren kann Code enthalten, der diese Informationen aus der Produktion entfernt package.json
.
- Möglicherweise möchten Sie Ihr Paket in verschiedenen Umgebungen bereitstellen, für die möglicherweise unterschiedliche Paketdateien erforderlich sind (z. B. möchten Sie möglicherweise unterschiedliche Versionen oder Abhängigkeiten haben).
--- BEARBEITEN ---
Ich wurde in den Kommentaren nach einer Lösung gefragt. Hier ist ein Code, den ich verwende. Dies sollte als Beispiel betrachtet werden, es ist nicht generisch gedacht und ist spezifisch für meine Projekte.
Mein Setup:
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.
Ich möchte nur das dist
Verzeichnis verpacken und das Verzeichnis sollte das Stammverzeichnis im Paket sein.
Die Datei SetupPackage.ts
in meinem src
Verzeichnis wird per Typoskript SetupPackage.js
in das dist
Verzeichnis kompiliert :
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();
Diese Datei:
- Kopiert das Stammverzeichnis
package.json
, entfernt jedoch die Skripte und Entwicklungsabhängigkeiten, die im Paket nicht benötigt werden. Außerdem wird der Haupteinstiegspunkt für das Paket festgelegt.
- Schreibt die Version des Pakets aus
package.json
in eine aufgerufene Datei version.txt
.
- Kopiert das
.npmignore
Paket aus dem Stammverzeichnis.
Der .npmignore-Inhalt lautet:
*.map
*.spec.*
SetupPackage.*
version.txt
Dh Unit-Tests (Spezifikationsdateien) und Typoskript-Map-Dateien werden ebenso ignoriert wie die SetupPackage.js
Datei und die version.txt
Datei, die sie erstellt. Dies hinterlässt ein sauberes Paket.
Schließlich enthält die Hauptdatei package.json
die folgenden Skripts zur Verwendung durch das Build-System (vorausgesetzt, sie sh
wird als Shell verwendet).
"scripts": {
"compile": "tsc",
"clean": "rm -rf dist",
"prebuildpackage": "npm run clean && npm run compile && node dist/SetupPackage.js",
"buildpackage": "cd dist && npm pack"
},
Um das Paket zu erstellen, klont das Build-System das Repo, führt es aus npm install
und führt es dann aus, npm run buildpackage
was wiederum:
- Löscht das
dist
Verzeichnis, um eine saubere Kompilierung zu gewährleisten.
- Kompiliert den Typoskript-Code in Javascript.
- Führt die
SetupPackage.js
Datei aus, die das dist
Verpacken vorbereitet .
- CDs in das
dist
Verzeichnis und erstellt das Paket dort.
Ich benutze die version.txt
Datei als einfache Möglichkeit, die Version in package.json zu erhalten und mein Repo zu markieren. Es gibt unzählige andere Möglichkeiten, dies zu tun, oder Sie möchten die Version automatisch inkrementieren. Entfernen Sie dies aus SetupPackage.ts
und .npmignore
wenn es für Sie nicht nützlich ist.