Closed5
[Electron] React x TypeScript を Rspack でビルドしてみる
ピン留めされたアイテム


rspack.config.ts
import type { Configuration } from "@rspack/cli";
import { CssExtractRspackPlugin, HtmlRspackPlugin } from "@rspack/core";
const isDev = process.env.NODE_ENV === "development";
const common: Configuration = {
mode: isDev ? "development" : "production",
externals: ["fsevents"],
resolve: {
extensions: [".js", ".ts", ".jsx", ".tsx", ".json"],
},
output: {
publicPath: "./",
assetModuleFilename: "assets/[name][ext]",
},
module: {
rules: [
{
test: /\.tsx?$/,
exclude: /node_modules/,
loader: "builtin:swc-loader",
options: {
jsc: {
parser: {
syntax: "typescript",
},
transform: {
react: {
runtime: "automatic",
},
},
},
},
},
{
test: /\.css$/,
use: [CssExtractRspackPlugin.loader, "css-loader"],
type: "javascript/auto",
},
{
test: /\.(ico|png|svg|eot|woff?2?)$/,
type: "asset/resource",
},
],
},
watch: isDev,
devtool: isDev ? "source-map" : false,
};
const main: Configuration = {
...common,
target: "electron-main",
entry: {
main: "./src/main.ts",
},
};
const preload: Configuration = {
...common,
target: "electron-preload",
entry: {
preload: "./src/preload.ts",
},
};
const renderer: Configuration = {
...common,
target: "web",
entry: {
app: "./src/web/index.tsx",
},
plugins: [
new CssExtractRspackPlugin(),
new HtmlRspackPlugin({
inject: "body",
template: "./src/web/index.html",
}),
],
};
export default [main, preload, renderer];

- NPM スクリプト
package.json
{
"scripts": {
"dev": "rimraf dist && run-p dev:rspack dev:electron",
"dev:rspack": "rspack --node-env \"development\"",
"dev:electron": "wait-on ./dist/index.html ./dist/main.js && electronmon .",
"build": "rimraf dist && rspack --node-env \"production\""
}
}

- 必要なパッケージ
package.json
{
"dependencies": {
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
"devDependencies": {
"@rspack/cli": "^1.1.3",
"@rspack/core": "^1.1.3",
"@types/node": "^22.9.1",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"css-loader": "^7.1.2",
"electron": "^33.2.0",
"electronmon": "^2.0.3",
"npm-run-all": "^4.1.5",
"rimraf": "^6.0.1",
"ts-node": "^10.9.2",
"typescript": "^5.6.3",
"wait-on": "^8.0.1"
}
}

- webpack
% npm run build
> electron-react-ts@0.0.0 build
> rimraf dist && cross-env NODE_ENV="production" webpack
1 asset
6 modules
webpack 5.96.1 compiled successfully in 1652 ms
1 asset
1 module
webpack 5.96.1 compiled successfully in 1580 ms
3 assets
20 modules
webpack 5.96.1 compiled successfully in 2829 ms
- Rspack
% npm run build
> electron-react-ts@0.0.0 build
> rimraf dist && rspack --node-env "production"
Rspack compiled successfully in 31 ms
Rspack compiled successfully in 28 ms
Rspack compiled successfully in 75 ms
このスクラップは2024/11/22にクローズされました