mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-11 15:04:52 +09:00
Replace webpack and Module Federation with Vite 8. The controller build emits one entry per shared module (lib, web_ui, typebox, antd, react, react-dom, react-router) and lists them in manifest.json. The controller turns that into an import map in index.html, and plugins are built as ES modules that import the shared modules by name and are loaded with import(). The shared Vite setup lives in @clusterio/web_ui/vite.mjs. Plugins use clusterioPlugin(), which exposes index, package.json and web/index under the same keys the webpack template used. The --dev and --dev-plugin flags now run the Vite dev server in middleware mode with hot module replacement. Browser polyfills move from web_ui to lib, which is the code that needs them, and lib sets the process and Buffer globals itself. Refs #1127 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
121 lines
2.8 KiB
JavaScript
121 lines
2.8 KiB
JavaScript
/**
|
|
* Clean the repository of build and execution artifacts.
|
|
*
|
|
* clean: A quick clean that removes all build artifacts making the output safe to publish
|
|
* clean-tests: Removes all build and test artifacts should not be required if tests are setup correctly.
|
|
* clean-all: Removes all build, test, and execution artifacts. Including cluster config and logs!
|
|
*/
|
|
|
|
import path from "node:path";
|
|
import fs from "node:fs/promises";
|
|
import yargs from "yargs";
|
|
|
|
import npmPackage from "./package.json" with { type: "json" };
|
|
const workspaces = npmPackage.workspaces
|
|
.map(p => p.slice(0, -2))
|
|
.filter(p => !p.includes("external_plugins"));
|
|
|
|
let DRY = false;
|
|
|
|
/**
|
|
* Attempt to remove a file / directory if it exists.
|
|
*
|
|
* @param {string} filePath The path to remove.
|
|
*/
|
|
async function tryRemove(filePath) {
|
|
try {
|
|
await fs.access(filePath);
|
|
console.log(filePath);
|
|
} catch {
|
|
return;
|
|
}
|
|
|
|
if (!DRY) {
|
|
await fs.rm(filePath, { force: true, recursive: true, maxRetries: 10 });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Removes all build artifacts
|
|
*/
|
|
async function removeBuildArtifacts() {
|
|
const tasks = [];
|
|
|
|
for (const workspace of workspaces) {
|
|
const basePath = path.resolve(workspace);
|
|
const packages = await fs.readdir(basePath);
|
|
for (const packageName of packages) {
|
|
tasks.push(
|
|
tryRemove(path.join(basePath, packageName, "dist"))
|
|
);
|
|
tasks.push(
|
|
tryRemove(path.join(basePath, packageName, "node_modules", ".vite"))
|
|
);
|
|
}
|
|
}
|
|
|
|
await Promise.all(tasks);
|
|
}
|
|
|
|
/**
|
|
* Removes all test artifacts
|
|
*/
|
|
async function removeTestArtifacts() {
|
|
const artifacts = [
|
|
".nyc_output", "coverage", "temp", "static",
|
|
];
|
|
|
|
await Promise.all(artifacts.map(artifact => tryRemove(path.resolve(artifact))));
|
|
}
|
|
|
|
/**
|
|
* Removes all execution artifacts
|
|
*/
|
|
async function removeExecutionArtifacts() {
|
|
const artifacts = [
|
|
"database", "instances", "logs", "mods",
|
|
"config-ctl.json", "config-controller.json", "config-host.json",
|
|
"FactorioAdminToken.txt", "plugin-list.json",
|
|
];
|
|
|
|
await Promise.all(artifacts.map(artifact => tryRemove(path.resolve(artifact))));
|
|
}
|
|
|
|
/**
|
|
* Main function for this script
|
|
*/
|
|
async function main() {
|
|
await yargs(process.argv.slice(2))
|
|
.scriptName("clean")
|
|
.option("dry-run", {
|
|
alias: "dry",
|
|
nargs: 0,
|
|
describe: "Will not delete any files",
|
|
default: false,
|
|
type: "boolean",
|
|
})
|
|
.command("all", "Remove all artifacts", () => {}, argv => {
|
|
DRY = argv.dry;
|
|
removeBuildArtifacts();
|
|
removeTestArtifacts();
|
|
removeExecutionArtifacts();
|
|
})
|
|
.command("tests", "Remove all build and test artifacts", () => {}, argv => {
|
|
DRY = argv.dry;
|
|
removeBuildArtifacts();
|
|
removeTestArtifacts();
|
|
})
|
|
.command("$0", "Remove all build artifacts", () => {}, argv => {
|
|
DRY = argv.dry;
|
|
removeBuildArtifacts();
|
|
})
|
|
.demandCommand(1, "A command must be specified")
|
|
.strict()
|
|
.parse();
|
|
}
|
|
|
|
// Run main if started from command line
|
|
if (import.meta.main) {
|
|
main();
|
|
}
|