From 3bd00cfc0299890004da6f53bc9735be18681706 Mon Sep 17 00:00:00 2001 From: Max Katz Date: Sun, 11 Sep 2022 00:09:10 +0200 Subject: [PATCH] Replace webpack with esbuild --- .../Avalonia.Web.Blazor.csproj | 1 - .../Interop/AvaloniaModule.cs | 2 +- .../Interop/Storage/StorageProviderInterop.cs | 2 +- src/Web/Avalonia.Web.Blazor/webapp/build.js | 16 ++++++++ .../webapp/modules/Avalonia.ts | 5 +++ .../webapp/modules/Avalonia/Avalonia.ts | 5 --- .../webapp/modules/Storage.ts | 1 + .../Avalonia.Web.Blazor/webapp/package.json | 9 ++--- .../Avalonia.Web.Blazor/webapp/tsconfig.json | 6 +-- .../webapp/webpack.config.js | 40 ------------------- 10 files changed, 30 insertions(+), 57 deletions(-) create mode 100644 src/Web/Avalonia.Web.Blazor/webapp/build.js create mode 100644 src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia.ts delete mode 100644 src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/Avalonia.ts create mode 100644 src/Web/Avalonia.Web.Blazor/webapp/modules/Storage.ts delete mode 100644 src/Web/Avalonia.Web.Blazor/webapp/webpack.config.js diff --git a/src/Web/Avalonia.Web.Blazor/Avalonia.Web.Blazor.csproj b/src/Web/Avalonia.Web.Blazor/Avalonia.Web.Blazor.csproj index 76a645a02a..79a9dafed7 100644 --- a/src/Web/Avalonia.Web.Blazor/Avalonia.Web.Blazor.csproj +++ b/src/Web/Avalonia.Web.Blazor/Avalonia.Web.Blazor.csproj @@ -31,7 +31,6 @@ - diff --git a/src/Web/Avalonia.Web.Blazor/Interop/AvaloniaModule.cs b/src/Web/Avalonia.Web.Blazor/Interop/AvaloniaModule.cs index 7aac879fa6..ff13e95aa7 100644 --- a/src/Web/Avalonia.Web.Blazor/Interop/AvaloniaModule.cs +++ b/src/Web/Avalonia.Web.Blazor/Interop/AvaloniaModule.cs @@ -4,7 +4,7 @@ namespace Avalonia.Web.Blazor.Interop { internal class AvaloniaModule : JSModuleInterop { - private AvaloniaModule(IJSRuntime js) : base(js, "./_content/Avalonia.Web.Blazor/avalonia.js") + private AvaloniaModule(IJSRuntime js) : base(js, "./_content/Avalonia.Web.Blazor/Avalonia.js") { } diff --git a/src/Web/Avalonia.Web.Blazor/Interop/Storage/StorageProviderInterop.cs b/src/Web/Avalonia.Web.Blazor/Interop/Storage/StorageProviderInterop.cs index f6428c8ef1..690d9683df 100644 --- a/src/Web/Avalonia.Web.Blazor/Interop/Storage/StorageProviderInterop.cs +++ b/src/Web/Avalonia.Web.Blazor/Interop/Storage/StorageProviderInterop.cs @@ -12,7 +12,7 @@ namespace Avalonia.Web.Blazor.Interop.Storage internal class StorageProviderInterop : JSModuleInterop, IStorageProvider { - private const string JsFilename = "./_content/Avalonia.Web.Blazor/avaloniaStorage.js"; + private const string JsFilename = "./_content/Avalonia.Web.Blazor/Storage.js"; private const string PickerCancelMessage = "The user aborted a request"; public static async Task ImportAsync(IJSRuntime js) diff --git a/src/Web/Avalonia.Web.Blazor/webapp/build.js b/src/Web/Avalonia.Web.Blazor/webapp/build.js new file mode 100644 index 0000000000..9d585dcade --- /dev/null +++ b/src/Web/Avalonia.Web.Blazor/webapp/build.js @@ -0,0 +1,16 @@ +require("esbuild").build({ + entryPoints: [ + "./modules/Avalonia.ts", + "./modules/Storage.ts" + ], + outdir: "../wwwroot", + bundle: true, + minify: true, + format: "esm", + target: "es2016", + platform: "browser", + sourcemap: "linked", + loader: {".ts": "ts"} + }) + .then(() => console.log("⚡ Done")) + .catch(() => process.exit(1)); \ No newline at end of file diff --git a/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia.ts b/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia.ts new file mode 100644 index 0000000000..bb497441aa --- /dev/null +++ b/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia.ts @@ -0,0 +1,5 @@ +export { DpiWatcher } from "./Avalonia/DpiWatcher" +export { InputHelper } from "./Avalonia/InputHelper" +export { NativeControlHost } from "./Avalonia/NativeControlHost" +export { SizeWatcher } from "./Avalonia/SizeWatcher" +export { SKHtmlCanvas } from "./Avalonia/SKHtmlCanvas" diff --git a/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/Avalonia.ts b/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/Avalonia.ts deleted file mode 100644 index 1ce2e850d9..0000000000 --- a/src/Web/Avalonia.Web.Blazor/webapp/modules/Avalonia/Avalonia.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { DpiWatcher } from "./DpiWatcher" -export { InputHelper } from "./InputHelper" -export { NativeControlHost } from "./NativeControlHost" -export { SizeWatcher } from "./SizeWatcher" -export { SKHtmlCanvas } from "./SKHtmlCanvas" diff --git a/src/Web/Avalonia.Web.Blazor/webapp/modules/Storage.ts b/src/Web/Avalonia.Web.Blazor/webapp/modules/Storage.ts new file mode 100644 index 0000000000..2c4654e81b --- /dev/null +++ b/src/Web/Avalonia.Web.Blazor/webapp/modules/Storage.ts @@ -0,0 +1 @@ +export { StorageProvider } from "./Storage/StorageProvider" diff --git a/src/Web/Avalonia.Web.Blazor/webapp/package.json b/src/Web/Avalonia.Web.Blazor/webapp/package.json index c312118a72..27e15b0abd 100644 --- a/src/Web/Avalonia.Web.Blazor/webapp/package.json +++ b/src/Web/Avalonia.Web.Blazor/webapp/package.json @@ -1,16 +1,13 @@ { "name": "avalonia.web", "scripts": { - "dist": "cross-env NODE_ENV=production webpack", - "build": "cross-env NODE_ENV=development webpack" + "prebuild": "tsc -noEmit", + "build": "node build.js" }, "devDependencies": { "@types/emscripten": "^1.39.6", "@types/wicg-file-system-access": "^2020.9.5", - "cross-env": "^7.0.3", - "ts-loader": "^9.3.1", "typescript": "^4.7.4", - "webpack": "^5.73.0", - "webpack-cli": "^4.10.0" + "esbuild": "^0.15.7" } } diff --git a/src/Web/Avalonia.Web.Blazor/webapp/tsconfig.json b/src/Web/Avalonia.Web.Blazor/webapp/tsconfig.json index 9a18b259c0..4e90bc230d 100644 --- a/src/Web/Avalonia.Web.Blazor/webapp/tsconfig.json +++ b/src/Web/Avalonia.Web.Blazor/webapp/tsconfig.json @@ -1,14 +1,14 @@ { "compilerOptions": { - "target": "ES6", + "target": "es2016", "strict": true, "sourceMap": true, "outDir": "../wwwroot", - "removeComments": true, "noEmitOnError": true, + "isolatedModules": true, // we need it for esbuild "lib": [ "dom", - "ES6", + "es2016", "esnext.asynciterable" ] }, diff --git a/src/Web/Avalonia.Web.Blazor/webapp/webpack.config.js b/src/Web/Avalonia.Web.Blazor/webapp/webpack.config.js deleted file mode 100644 index 52d507a2b2..0000000000 --- a/src/Web/Avalonia.Web.Blazor/webapp/webpack.config.js +++ /dev/null @@ -1,40 +0,0 @@ -const path = require('path'); -const prod = process.env.NODE_ENV == 'production'; - -module.exports = { - mode: prod ? "production" : "development", - devtool: 'source-map', - target: ["web", "es2020"], - entry: { - avalonia: './modules/Avalonia/Avalonia.ts', - avaloniaStorage: { - import: './modules/Storage/StorageProvider.ts', - dependOn: 'avalonia', - } - }, - output: { - filename: '[name].js', - path: path.resolve(__dirname, '../wwwroot'), - library: { - type: 'module', - }, - }, - module: { - rules: [ - { - test: /\.tsx?$/, - use: 'ts-loader', - exclude: /node_modules/, - }, - ], - }, - resolve: { - extensions: ['.ts', '.js'], - }, - optimization: { - minimize: false - }, - experiments: { - outputModule: true, - } -};