120 lines
3.0 KiB
TypeScript
120 lines
3.0 KiB
TypeScript
import * as path from "path";
|
|
import { defineConfig } from "@rspack/cli";
|
|
import { rspack } from "@rspack/core";
|
|
import { version } from "./package.json";
|
|
|
|
const isDev = process.env.NODE_ENV === "development";
|
|
const isBeta = version.includes("-");
|
|
|
|
// Target browsers, see: https://github.com/browserslist/browserslist
|
|
const targets = ["chrome >= 87", "edge >= 88", "firefox >= 78", "safari >= 14"];
|
|
|
|
const src = `${__dirname}/src`;
|
|
const dist = `${__dirname}/dist`;
|
|
const assets = `${src}/assets`;
|
|
|
|
export default defineConfig({
|
|
...(isDev
|
|
? {
|
|
watch: true,
|
|
mode: "development",
|
|
devtool: "inline-source-map",
|
|
}
|
|
: {}),
|
|
context: __dirname,
|
|
entry: {
|
|
service_worker: `${src}/service_worker.ts`,
|
|
popup: `${src}/pages/popup/main.tsx`,
|
|
},
|
|
output: {
|
|
path: `${dist}/ext/src`,
|
|
filename: "[name].js",
|
|
clean: true,
|
|
},
|
|
resolve: {
|
|
extensions: ["...", ".ts", ".tsx", ".jsx"],
|
|
alias: {
|
|
"@App": path.resolve(__dirname, "src/"),
|
|
"@Pkg": path.resolve(__dirname, "pkg/"),
|
|
},
|
|
},
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.(svg|png)$/,
|
|
type: "asset",
|
|
},
|
|
{
|
|
test: /\.(jsx?|tsx?)$/,
|
|
use: [
|
|
{
|
|
loader: "builtin:swc-loader",
|
|
options: {
|
|
jsc: {
|
|
parser: {
|
|
syntax: "typescript",
|
|
tsx: true,
|
|
},
|
|
transform: {
|
|
react: {
|
|
runtime: "automatic",
|
|
development: isDev,
|
|
},
|
|
},
|
|
},
|
|
env: { targets },
|
|
},
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
plugins: [
|
|
new rspack.CopyRspackPlugin({
|
|
patterns: [
|
|
{
|
|
from: `${src}/manifest.json`,
|
|
to: `${dist}/ext`,
|
|
// 将manifest.json内版本号替换为package.json中版本号
|
|
transform(content: Buffer) {
|
|
const manifest = JSON.parse(content.toString());
|
|
if (isDev) {
|
|
manifest.name = "ScriptCat - Dev";
|
|
// manifest.content_security_policy = "script-src 'self' https://cdn.crowdin.com; object-src 'self'";
|
|
}
|
|
return JSON.stringify(manifest);
|
|
},
|
|
},
|
|
{
|
|
from: `${assets}/logo${isDev ? "-beta" : ""}.png`,
|
|
to: `${dist}/ext/assets/logo.png`,
|
|
},
|
|
{ from: `${assets}/logo`, to: `${dist}/ext/assets/logo` },
|
|
{
|
|
from: `${assets}/_locales`,
|
|
to: `${dist}/ext/_locales`,
|
|
},
|
|
],
|
|
}),
|
|
new rspack.HtmlRspackPlugin({
|
|
filename: `${dist}/ext/src/popup.html`,
|
|
template: `${src}/pages/popup/index.html`,
|
|
inject: "head",
|
|
title: "Home - ScriptCat",
|
|
minify: true,
|
|
chunks: ["popup"],
|
|
}),
|
|
].filter(Boolean),
|
|
optimization: {
|
|
minimizer: [
|
|
new rspack.SwcJsMinimizerRspackPlugin(),
|
|
new rspack.LightningCssMinimizerRspackPlugin({
|
|
minimizerOptions: { targets },
|
|
}),
|
|
],
|
|
},
|
|
experiments: {
|
|
css: true,
|
|
},
|
|
});
|