Open-Source-Toolkit
Die langweiligen Teile beim Ausliefern einer TypeScript-Library, schon gelöst.
Eine Library in vier Schritten vom Quellcode zum Release, mit vier der Pakete. Jedes lässt sich einzeln installieren, keines braucht die anderen.
Bauen ohne Konfigurationsdatei.
Packem liest die Entry Points aus den Exports, die ohnehin schon deklariert sind. Es gibt also keine zweite Dateiliste, die mit der package.json Schritt halten muss.
// package.json
{
"exports": {
"import": "./dist/index.mjs",
"require": "./dist/index.cjs"
},
"types": "./dist/index.d.ts"
}
$ packem build
// CJS and ESM, .d.ts bundled, dependencies
// externalised. No config file required.Weiter: sehen, was zur Laufzeit passiert
Sieh zu, was sie tut.
Lesbare Badges bei der Arbeit, strukturiertes JSON in der Produktion, derselbe Logger in Node, an der Edge und im Browser. Wiederholte Zeilen werden zusammengefasst statt die Ausgabe zu fluten.
import { pail } from "@visulima/pail";
pail.success("Operation successful");
pail.pending("Write release notes for %s", "1.2.0");
pail.fatal(new Error("Unable to acquire lock"));
// Or configure your own instance
import { createPail } from "@visulima/pail";
const logger = createPail({ logLevel: "warn" });
logger.info("Filtered out");
logger.force.info("Logged anyway");Weiter: eine Kommandozeile dazu
Gib ihr eine Kommandozeile.
Kommandos, Flags und Argumente, deren Hilfetext aus derselben Definition entsteht. Die Dokumentation kann dem Parser also nicht davonlaufen. Läuft auf Node, Deno und Bun.
import { Cerebro } from "@visulima/cerebro";
const cli = new Cerebro("my-cli");
cli.addCommand({
name: "build",
description: "Build the project",
options: [
{
name: "output",
alias: "o",
type: String,
defaultValue: "dist",
},
{ name: "watch", alias: "w", type: Boolean },
],
execute: ({ logger, options }) => {
logger.info(`Building to ${options.output}`);
},
});
await cli.run();Zuletzt: das Repository sauber halten
Halte das Repository sauber.
Ein Toolkit für die Pflichtaufgaben: Task-Runner mit Cache, Hooks für gestagte Dateien, Secret-Scanning und ein gepinnter Installer, damit ein frischer Clone denselben Baum auflöst. Diese Website ist damit gebaut.
// vis.config.ts
import { defineConfig } from "@visulima/vis/config";
export default defineConfig({
install: { backend: "aube" },
staged: {
"*.{ts,tsx}": ["eslint --fix", "prettier --write"],
"package.json": (files) =>
`sort-package-json ${files.join(" ")}`,
},
});Am häufigsten installiert
Die vier oben sind der Rundgang. Diese hier tauchen still in den meisten Lockfiles auf.
Was drin ist
Ein Monorepo, veröffentlicht Paket für Paket. Nehmen Sie die zwei, die Sie brauchen, und lassen Sie den Rest.
Getestet auf den Runtimes, auf die Sie ausliefern.
Jedes Paket ist auf aktuelles Node ausgelegt und wird vor dem Release gegen die anderen Runtimes geprüft.
Nutzen, kaputt machen, Bescheid geben
Alles entsteht öffentlich. Ein Issue aufmachen, einen Patch schicken oder das Paket einfach nehmen und loslegen.
