Build plugin web bundles with Vite

clusterio#1130 replaced webpack with Vite and the web interface rejects
webpack-built plugin bundles. Each plugin now builds with clusterioPlugin()
from @clusterio/web_ui/vite.mjs, and the webpack configs and dependencies
are gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bbassieandClaude Opus 5.5 committed 2026-10-28 23:43:25 +00:00
1 parent c61dcaecb5
commit e84bd97b99
37 files changed
+110 -433

No files matched your search

+1 -1
View File
@@ -1,3 +1,3 @@
webpack.config.js vite.config.js
dist/web/build dist/web/build
dist/browser dist/browser
+3 -4
View File
@@ -8,7 +8,7 @@
"type": "module", "type": "module",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"scripts": { "scripts": {
"prepare": "tsc --build && webpack-cli --env production", "prepare": "tsc --build && vite build",
"test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js", "test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js",
"coverage": "tap --coverage-report=text test/*.test.js" "coverage": "tap --coverage-report=text test/*.test.js"
}, },
@@ -27,12 +27,11 @@
"devDependencies": { "devDependencies": {
"@clusterio/controller": "workspace:^", "@clusterio/controller": "workspace:^",
"@clusterio/lib": "workspace:^", "@clusterio/lib": "workspace:^",
"@clusterio/web_ui": "workspace:^",
"@types/node": "catalog:", "@types/node": "catalog:",
"tap": "^21.1.0", "tap": "^21.1.0",
"typescript": "catalog:", "typescript": "catalog:",
"webpack": "catalog:", "vite": "catalog:"
"webpack-cli": "catalog:",
"webpack-merge": "catalog:"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite";
import { clusterioPlugin } from "@clusterio/web_ui/vite.mjs";
export default defineConfig({
plugins: [clusterioPlugin()],
});
-29
View File
@@ -1,29 +0,0 @@
"use strict";
const path = require("path");
const webpack = require("webpack");
const { merge } = require("webpack-merge");
const common = require("@clusterio/web_ui/webpack.common");
module.exports = (env = {}) => merge(common(env), {
context: __dirname,
entry: "./web/index.tsx",
output: {
path: path.resolve(__dirname, "dist", "web"),
},
plugins: [
new webpack.container.ModuleFederationPlugin({
name: "exp_auto_restart",
library: { type: "window", name: "plugin_exp_auto_restart" },
exposes: {
"./": "./index.ts",
"./package.json": "./package.json",
"./web": "./web/index.tsx",
},
shared: {
"@clusterio/lib": { import: false },
"@clusterio/web_ui": { import: false },
},
}),
],
});
+3 -4
View File
@@ -8,7 +8,7 @@
"type": "module", "type": "module",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"scripts": { "scripts": {
"prepare": "tsc --build && webpack-cli --env production" "prepare": "tsc --build && vite build"
}, },
"engines": { "engines": {
"node": ">=22" "node": ">=22"
@@ -25,11 +25,10 @@
"devDependencies": { "devDependencies": {
"@clusterio/host": "workspace:^", "@clusterio/host": "workspace:^",
"@clusterio/lib": "workspace:^", "@clusterio/lib": "workspace:^",
"@clusterio/web_ui": "workspace:^",
"@types/node": "catalog:", "@types/node": "catalog:",
"typescript": "catalog:", "typescript": "catalog:",
"webpack": "catalog:", "vite": "catalog:"
"webpack-cli": "catalog:",
"webpack-merge": "catalog:"
}, },
"dependencies": { "dependencies": {
"@expcluster/lib_util": "workspace:^", "@expcluster/lib_util": "workspace:^",
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite";
import { clusterioPlugin } from "@clusterio/web_ui/vite.mjs";
export default defineConfig({
plugins: [clusterioPlugin()],
});
-29
View File
@@ -1,29 +0,0 @@
"use strict";
const path = require("path");
const webpack = require("webpack");
const { merge } = require("webpack-merge");
const common = require("@clusterio/web_ui/webpack.common");
module.exports = (env = {}) => merge(common(env), {
context: __dirname,
entry: "./web/index.tsx",
output: {
path: path.resolve(__dirname, "dist", "web"),
},
plugins: [
new webpack.container.ModuleFederationPlugin({
name: "exp_commands",
library: { type: "window", name: "plugin_exp_commands" },
exposes: {
"./": "./index.ts",
"./package.json": "./package.json",
"./web": "./web/index.tsx",
},
shared: {
"@clusterio/lib": { import: false },
"@clusterio/web_ui": { import: false },
},
}),
],
});
+3 -5
View File
@@ -8,7 +8,7 @@
"type": "module", "type": "module",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"scripts": { "scripts": {
"prepare": "tsc --build && webpack-cli --env production", "prepare": "tsc --build && vite build",
"test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js", "test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js",
"coverage": "tap --coverage-report=text test/*.test.js" "coverage": "tap --coverage-report=text test/*.test.js"
}, },
@@ -40,11 +40,9 @@
"react": "catalog:", "react": "catalog:",
"react-dom": "catalog:", "react-dom": "catalog:",
"react-router-dom": "catalog:", "react-router-dom": "catalog:",
"typescript": "catalog:",
"webpack": "catalog:",
"tap": "^21.1.0", "tap": "^21.1.0",
"webpack-cli": "catalog:", "typescript": "catalog:",
"webpack-merge": "catalog:" "vite": "catalog:"
}, },
"dependencies": { "dependencies": {
"@sinclair/typebox": "catalog:", "@sinclair/typebox": "catalog:",
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite";
import { clusterioPlugin } from "@clusterio/web_ui/vite.mjs";
export default defineConfig({
plugins: [clusterioPlugin()],
});
-34
View File
@@ -1,34 +0,0 @@
"use strict";
const path = require("path");
const webpack = require("webpack");
const { merge } = require("webpack-merge");
const common = require("@clusterio/web_ui/webpack.common");
module.exports = (env = {}) => merge(common(env), {
context: __dirname,
entry: "./web/index.tsx",
output: {
path: path.resolve(__dirname, "dist", "web"),
},
plugins: [
new webpack.container.ModuleFederationPlugin({
name: "exp_discord_auth",
library: { type: "window", name: "plugin_exp_discord_auth" },
exposes: {
"./": "./index.ts",
"./package.json": "./package.json",
"./web": "./web/index.tsx",
},
shared: {
"@clusterio/lib": { import: false },
"@clusterio/web_ui": { import: false },
"antd": { import: false },
"react": { import: false },
"react-dom": { import: false },
"react-router": { import: false },
"react-router-dom": { import: false },
},
}),
],
});
+3 -5
View File
@@ -8,7 +8,7 @@
"type": "module", "type": "module",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"scripts": { "scripts": {
"prepare": "tsc --build && webpack-cli --env production" "prepare": "tsc --build && vite build"
}, },
"engines": { "engines": {
"node": ">=22" "node": ">=22"
@@ -39,9 +39,7 @@
"react-dom": "catalog:", "react-dom": "catalog:",
"react-router-dom": "catalog:", "react-router-dom": "catalog:",
"typescript": "catalog:", "typescript": "catalog:",
"webpack": "catalog:", "vite": "catalog:"
"webpack-cli": "catalog:",
"webpack-merge": "catalog:"
}, },
"dependencies": { "dependencies": {
"@sinclair/typebox": "catalog:" "@sinclair/typebox": "catalog:"
@@ -54,4 +52,4 @@
"clusterio-plugin", "clusterio-plugin",
"factorio" "factorio"
] ]
} }
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite";
import { clusterioPlugin } from "@clusterio/web_ui/vite.mjs";
export default defineConfig({
plugins: [clusterioPlugin()],
});
-34
View File
@@ -1,34 +0,0 @@
"use strict";
const path = require("path");
const webpack = require("webpack");
const { merge } = require("webpack-merge");
const common = require("@clusterio/web_ui/webpack.common");
module.exports = (env = {}) => merge(common(env), {
context: __dirname,
entry: "./web/index.tsx",
output: {
path: path.resolve(__dirname, "dist", "web"),
},
plugins: [
new webpack.container.ModuleFederationPlugin({
name: "exp_groups",
library: { type: "window", name: "plugin_exp_groups" },
exposes: {
"./": "./index.ts",
"./package.json": "./package.json",
"./web": "./web/index.tsx",
},
shared: {
"@clusterio/lib": { import: false },
"@clusterio/web_ui": { import: false },
"antd": { import: false },
"react": { import: false },
"react-dom": { import: false },
"react-router": { import: false },
"react-router-dom": { import: false },
},
}),
],
});
+3 -4
View File
@@ -8,7 +8,7 @@
"type": "module", "type": "module",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"scripts": { "scripts": {
"prepare": "tsc --build && webpack-cli --env production" "prepare": "tsc --build && vite build"
}, },
"engines": { "engines": {
"node": ">=22" "node": ">=22"
@@ -25,11 +25,10 @@
"devDependencies": { "devDependencies": {
"@clusterio/host": "workspace:^", "@clusterio/host": "workspace:^",
"@clusterio/lib": "workspace:^", "@clusterio/lib": "workspace:^",
"@clusterio/web_ui": "workspace:^",
"@types/node": "catalog:", "@types/node": "catalog:",
"typescript": "catalog:", "typescript": "catalog:",
"webpack": "catalog:", "vite": "catalog:"
"webpack-cli": "catalog:",
"webpack-merge": "catalog:"
}, },
"dependencies": { "dependencies": {
"@expcluster/lib_util": "workspace:^", "@expcluster/lib_util": "workspace:^",
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite";
import { clusterioPlugin } from "@clusterio/web_ui/vite.mjs";
export default defineConfig({
plugins: [clusterioPlugin()],
});
-29
View File
@@ -1,29 +0,0 @@
"use strict";
const path = require("path");
const webpack = require("webpack");
const { merge } = require("webpack-merge");
const common = require("@clusterio/web_ui/webpack.common");
module.exports = (env = {}) => merge(common(env), {
context: __dirname,
entry: "./web/index.tsx",
output: {
path: path.resolve(__dirname, "dist", "web"),
},
plugins: [
new webpack.container.ModuleFederationPlugin({
name: "exp_gui",
library: { type: "window", name: "plugin_exp_gui" },
exposes: {
"./": "./index.ts",
"./package.json": "./package.json",
"./web": "./web/index.tsx",
},
shared: {
"@clusterio/lib": { import: false },
"@clusterio/web_ui": { import: false },
},
}),
],
});
+2 -4
View File
@@ -8,7 +8,7 @@
"type": "module", "type": "module",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"scripts": { "scripts": {
"prepare": "tsc --build && webpack-cli --env production", "prepare": "tsc --build && vite build",
"test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js", "test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js",
"coverage": "tap --coverage-report=text test/*.test.js" "coverage": "tap --coverage-report=text test/*.test.js"
}, },
@@ -42,9 +42,7 @@
"react-router-dom": "catalog:", "react-router-dom": "catalog:",
"tap": "^21.1.0", "tap": "^21.1.0",
"typescript": "catalog:", "typescript": "catalog:",
"webpack": "catalog:", "vite": "catalog:"
"webpack-cli": "catalog:",
"webpack-merge": "catalog:"
}, },
"dependencies": { "dependencies": {
"@sinclair/typebox": "catalog:", "@sinclair/typebox": "catalog:",
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite";
import { clusterioPlugin } from "@clusterio/web_ui/vite.mjs";
export default defineConfig({
plugins: [clusterioPlugin()],
});
-34
View File
@@ -1,34 +0,0 @@
"use strict";
const path = require("path");
const webpack = require("webpack");
const { merge } = require("webpack-merge");
const common = require("@clusterio/web_ui/webpack.common");
module.exports = (env = {}) => merge(common(env), {
context: __dirname,
entry: "./web/index.tsx",
output: {
path: path.resolve(__dirname, "dist", "web"),
},
plugins: [
new webpack.container.ModuleFederationPlugin({
name: "exp_player_statistics",
library: { type: "window", name: "plugin_exp_player_statistics" },
exposes: {
"./": "./index.ts",
"./package.json": "./package.json",
"./web": "./web/index.tsx",
},
shared: {
"@clusterio/lib": { import: false },
"@clusterio/web_ui": { import: false },
"antd": { import: false },
"react": { import: false },
"react-dom": { import: false },
"react-router": { import: false },
"react-router-dom": { import: false },
},
}),
],
});
+4 -6
View File
@@ -8,7 +8,7 @@
"type": "module", "type": "module",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"scripts": { "scripts": {
"prepare": "tsc --build && webpack-cli --env production", "prepare": "tsc --build && vite build",
"test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js", "test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js",
"coverage": "tap --coverage-report=text test/*.test.js" "coverage": "tap --coverage-report=text test/*.test.js"
}, },
@@ -37,15 +37,13 @@
"@types/node": "catalog:", "@types/node": "catalog:",
"@types/react": "catalog:", "@types/react": "catalog:",
"antd": "catalog:", "antd": "catalog:",
"fengari": "^0.1.5",
"react": "catalog:", "react": "catalog:",
"react-dom": "catalog:", "react-dom": "catalog:",
"react-router-dom": "catalog:", "react-router-dom": "catalog:",
"typescript": "catalog:",
"webpack": "catalog:",
"fengari": "^0.1.5",
"tap": "^21.1.0", "tap": "^21.1.0",
"webpack-cli": "catalog:", "typescript": "catalog:",
"webpack-merge": "catalog:" "vite": "catalog:"
}, },
"dependencies": { "dependencies": {
"@sinclair/typebox": "catalog:", "@sinclair/typebox": "catalog:",
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite";
import { clusterioPlugin } from "@clusterio/web_ui/vite.mjs";
export default defineConfig({
plugins: [clusterioPlugin()],
});
-34
View File
@@ -1,34 +0,0 @@
"use strict";
const path = require("path");
const webpack = require("webpack");
const { merge } = require("webpack-merge");
const common = require("@clusterio/web_ui/webpack.common");
module.exports = (env = {}) => merge(common(env), {
context: __dirname,
entry: "./web/index.tsx",
output: {
path: path.resolve(__dirname, "dist", "web"),
},
plugins: [
new webpack.container.ModuleFederationPlugin({
name: "exp_reports",
library: { type: "window", name: "plugin_exp_reports" },
exposes: {
"./": "./index.ts",
"./package.json": "./package.json",
"./web": "./web/index.tsx",
},
shared: {
"@clusterio/lib": { import: false },
"@clusterio/web_ui": { import: false },
"antd": { import: false },
"react": { import: false },
"react-dom": { import: false },
"react-router": { import: false },
"react-router-dom": { import: false },
},
}),
],
});
+4 -6
View File
@@ -8,7 +8,7 @@
"type": "module", "type": "module",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"scripts": { "scripts": {
"prepare": "tsc --build && webpack-cli --env production", "prepare": "tsc --build && vite build",
"test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js", "test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js",
"coverage": "tap --coverage-report=text test/*.test.js" "coverage": "tap --coverage-report=text test/*.test.js"
}, },
@@ -37,15 +37,13 @@
"@types/node": "catalog:", "@types/node": "catalog:",
"@types/react": "catalog:", "@types/react": "catalog:",
"antd": "catalog:", "antd": "catalog:",
"fengari": "^0.1.5",
"react": "catalog:", "react": "catalog:",
"react-dom": "catalog:", "react-dom": "catalog:",
"react-router-dom": "catalog:", "react-router-dom": "catalog:",
"typescript": "catalog:",
"webpack": "catalog:",
"fengari": "^0.1.5",
"tap": "^21.1.0", "tap": "^21.1.0",
"webpack-cli": "catalog:", "typescript": "catalog:",
"webpack-merge": "catalog:" "vite": "catalog:"
}, },
"dependencies": { "dependencies": {
"@sinclair/typebox": "catalog:" "@sinclair/typebox": "catalog:"
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite";
import { clusterioPlugin } from "@clusterio/web_ui/vite.mjs";
export default defineConfig({
plugins: [clusterioPlugin()],
});
-34
View File
@@ -1,34 +0,0 @@
"use strict";
const path = require("path");
const webpack = require("webpack");
const { merge } = require("webpack-merge");
const common = require("@clusterio/web_ui/webpack.common");
module.exports = (env = {}) => merge(common(env), {
context: __dirname,
entry: "./web/index.tsx",
output: {
path: path.resolve(__dirname, "dist", "web"),
},
plugins: [
new webpack.container.ModuleFederationPlugin({
name: "exp_roles",
library: { type: "window", name: "plugin_exp_roles" },
exposes: {
"./": "./index.ts",
"./package.json": "./package.json",
"./web": "./web/index.tsx",
},
shared: {
"@clusterio/lib": { import: false },
"@clusterio/web_ui": { import: false },
"antd": { import: false },
"react": { import: false },
"react-dom": { import: false },
"react-router": { import: false },
"react-router-dom": { import: false },
},
}),
],
});
+2 -4
View File
@@ -8,7 +8,7 @@
"type": "module", "type": "module",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"scripts": { "scripts": {
"prepare": "tsc --build && webpack-cli --env production", "prepare": "tsc --build && vite build",
"test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js", "test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js",
"coverage": "tap --coverage-report=text test/*.test.js" "coverage": "tap --coverage-report=text test/*.test.js"
}, },
@@ -41,9 +41,7 @@
"react-dom": "catalog:", "react-dom": "catalog:",
"tap": "^21.1.0", "tap": "^21.1.0",
"typescript": "catalog:", "typescript": "catalog:",
"webpack": "catalog:", "vite": "catalog:"
"webpack-cli": "catalog:",
"webpack-merge": "catalog:"
}, },
"dependencies": { "dependencies": {
"@expcluster/lib_commands": "workspace:^", "@expcluster/lib_commands": "workspace:^",
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite";
import { clusterioPlugin } from "@clusterio/web_ui/vite.mjs";
export default defineConfig({
plugins: [clusterioPlugin()],
});
-32
View File
@@ -1,32 +0,0 @@
"use strict";
const path = require("path");
const webpack = require("webpack");
const { merge } = require("webpack-merge");
const common = require("@clusterio/web_ui/webpack.common");
module.exports = (env = {}) => merge(common(env), {
context: __dirname,
entry: "./web/index.tsx",
output: {
path: path.resolve(__dirname, "dist", "web"),
},
plugins: [
new webpack.container.ModuleFederationPlugin({
name: "exp_scenario",
library: { type: "window", name: "plugin_exp_scenario" },
exposes: {
"./": "./index.ts",
"./package.json": "./package.json",
"./web": "./web/index.tsx",
},
shared: {
"@clusterio/lib": { import: false },
"@clusterio/web_ui": { import: false },
"antd": { import: false },
"react": { import: false },
"react-dom": { import: false },
},
}),
],
});
+2 -4
View File
@@ -8,7 +8,7 @@
"type": "module", "type": "module",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"scripts": { "scripts": {
"prepare": "tsc --build && webpack-cli --env production", "prepare": "tsc --build && vite build",
"test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js", "test": "tap --type-strip-only --disable-coverage --allow-empty-coverage test/*.test.js",
"coverage": "tap --coverage-report=text test/*.test.js" "coverage": "tap --coverage-report=text test/*.test.js"
}, },
@@ -37,9 +37,7 @@
"fengari": "^0.1.5", "fengari": "^0.1.5",
"tap": "^21.1.0", "tap": "^21.1.0",
"typescript": "catalog:", "typescript": "catalog:",
"webpack": "catalog:", "vite": "catalog:"
"webpack-cli": "catalog:",
"webpack-merge": "catalog:"
}, },
"dependencies": { "dependencies": {
"@sinclair/typebox": "catalog:", "@sinclair/typebox": "catalog:",
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite";
import { clusterioPlugin } from "@clusterio/web_ui/vite.mjs";
export default defineConfig({
plugins: [clusterioPlugin()],
});
-29
View File
@@ -1,29 +0,0 @@
"use strict";
const path = require("path");
const webpack = require("webpack");
const { merge } = require("webpack-merge");
const common = require("@clusterio/web_ui/webpack.common");
module.exports = (env = {}) => merge(common(env), {
context: __dirname,
entry: "./web/index.tsx",
output: {
path: path.resolve(__dirname, "dist", "web"),
},
plugins: [
new webpack.container.ModuleFederationPlugin({
name: "exp_server_list",
library: { type: "window", name: "plugin_exp_server_list" },
exposes: {
"./": "./index.ts",
"./package.json": "./package.json",
"./web": "./web/index.tsx",
},
shared: {
"@clusterio/lib": { import: false },
"@clusterio/web_ui": { import: false },
},
}),
],
});
+5 -6
View File
@@ -8,7 +8,7 @@
"type": "module", "type": "module",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"scripts": { "scripts": {
"prepare": "tsc --build && webpack-cli --env production" "prepare": "tsc --build && vite build"
}, },
"engines": { "engines": {
"node": ">=22" "node": ">=22"
@@ -25,11 +25,10 @@
"devDependencies": { "devDependencies": {
"@clusterio/host": "workspace:^", "@clusterio/host": "workspace:^",
"@clusterio/lib": "workspace:^", "@clusterio/lib": "workspace:^",
"typescript": "catalog:", "@clusterio/web_ui": "workspace:^",
"@types/node": "catalog:", "@types/node": "catalog:",
"webpack": "catalog:", "typescript": "catalog:",
"webpack-cli": "catalog:", "vite": "catalog:"
"webpack-merge": "catalog:"
}, },
"dependencies": { "dependencies": {
"@sinclair/typebox": "catalog:", "@sinclair/typebox": "catalog:",
@@ -45,4 +44,4 @@
"clusterio-plugin", "clusterio-plugin",
"factorio" "factorio"
] ]
} }
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite";
import { clusterioPlugin } from "@clusterio/web_ui/vite.mjs";
export default defineConfig({
plugins: [clusterioPlugin()],
});
-29
View File
@@ -1,29 +0,0 @@
"use strict";
const path = require("path");
const webpack = require("webpack");
const { merge } = require("webpack-merge");
const common = require("@clusterio/web_ui/webpack.common");
module.exports = (env = {}) => merge(common(env), {
context: __dirname,
entry: "./web/index.tsx",
output: {
path: path.resolve(__dirname, "dist", "web"),
},
plugins: [
new webpack.container.ModuleFederationPlugin({
name: "exp_server_ups",
library: { type: "window", name: "plugin_exp_server_ups" },
exposes: {
"./": "./index.ts",
"./package.json": "./package.json",
"./web": "./web/index.tsx",
},
shared: {
"@clusterio/lib": { import: false },
"@clusterio/web_ui": { import: false },
},
}),
],
});
+3 -4
View File
@@ -8,7 +8,7 @@
"type": "module", "type": "module",
"main": "dist/node/index.js", "main": "dist/node/index.js",
"scripts": { "scripts": {
"prepare": "tsc --build && webpack-cli --env production" "prepare": "tsc --build && vite build"
}, },
"engines": { "engines": {
"node": ">=22" "node": ">=22"
@@ -25,11 +25,10 @@
"devDependencies": { "devDependencies": {
"@clusterio/host": "workspace:^", "@clusterio/host": "workspace:^",
"@clusterio/lib": "workspace:^", "@clusterio/lib": "workspace:^",
"@clusterio/web_ui": "workspace:^",
"@types/node": "catalog:", "@types/node": "catalog:",
"typescript": "catalog:", "typescript": "catalog:",
"webpack": "catalog:", "vite": "catalog:"
"webpack-cli": "catalog:",
"webpack-merge": "catalog:"
}, },
"dependencies": { "dependencies": {
"@sinclair/typebox": "catalog:" "@sinclair/typebox": "catalog:"
+6
View File
@@ -0,0 +1,6 @@
import { defineConfig } from "vite";
import { clusterioPlugin } from "@clusterio/web_ui/vite.mjs";
export default defineConfig({
plugins: [clusterioPlugin()],
});
-29
View File
@@ -1,29 +0,0 @@
"use strict";
const path = require("path");
const webpack = require("webpack");
const { merge } = require("webpack-merge");
const common = require("@clusterio/web_ui/webpack.common");
module.exports = (env = {}) => merge(common(env), {
context: __dirname,
entry: "./web/index.tsx",
output: {
path: path.resolve(__dirname, "dist", "web"),
},
plugins: [
new webpack.container.ModuleFederationPlugin({
name: "exp_util",
library: { type: "window", name: "plugin_exp_util" },
exposes: {
"./": "./index.ts",
"./package.json": "./package.json",
"./web": "./web/index.tsx",
},
shared: {
"@clusterio/lib": { import: false },
"@clusterio/web_ui": { import: false },
},
}),
],
});