Skip to content

Commit 1e86f31

Browse files
committed
refactor: ♻️ 重构项目打包、脚本模块导入,迁移至 rolldown
1 parent 39cfbfd commit 1e86f31

64 files changed

Lines changed: 2716 additions & 4486 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/.vitepress/imgSize.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,7 @@ const getImg = (url: string) => {
99
return fs.readFileSync(`docs/public/${name}`);
1010
}
1111

12-
if (url.startsWith('http')) {
13-
const res = fetch(url);
14-
return res.buffer();
15-
}
16-
12+
if (url.startsWith('http')) return fetch(url).buffer();
1713
return fs.readFileSync(url);
1814
};
1915

docs/功能/页面填充.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
::: info 举例
66

77
<table>
8+
<tbody>
89
<tr>
910
<td>图1</td>
1011
<td>填充页</td>
@@ -13,6 +14,7 @@
1314
<td>图3</td>
1415
<td>图2</td>
1516
</tr>
17+
</tbody>
1618
</table>
1719
:::
1820

@@ -29,6 +31,7 @@
2931
::: info 举例
3032

3133
<table>
34+
<tbody>
3235
<tr>
3336
<td>图2</td>
3437
<td>图1</td>
@@ -44,11 +47,13 @@
4447
<td>图7</td>
4548
<td>图6</td>
4649
</tr>
50+
</tbody>
4751
</table>
4852

4953
<p>在第一页和第二页切换「页面填充」只会在第一页增加填充页,下面跨页之后的左右顺序不受影响</p>
5054

5155
<table>
56+
<tbody>
5257
<tr>
5358
<td>图1</td>
5459
<td>填充页</td>
@@ -68,6 +73,7 @@
6873
<td>图7</td>
6974
<td>图6</td>
7075
</tr>
76+
</tbody>
7177
</table>
7278
:::
7379

oxlint.config.ts

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import i18nextPlugin from 'eslint-plugin-i18next';
22
import solidPlugin from 'eslint-plugin-solid';
33
import { defineConfig } from 'oxlint';
44

5+
import packlistData from './scripts/lib/packlist.json' with { type: 'json' };
6+
57
export default defineConfig({
68
plugins: [
79
'oxc',
@@ -12,13 +14,18 @@ export default defineConfig({
1214
'jsdoc',
1315
'vitest',
1416
],
15-
jsPlugins: ['eslint-plugin-solid', 'eslint-plugin-i18next'],
17+
jsPlugins: [
18+
'eslint-plugin-solid',
19+
'eslint-plugin-i18next',
20+
'./scripts/lint-plugin/restricted-relative-imports.mjs',
21+
],
1622
categories: {
1723
correctness: 'error',
1824
suspicious: 'error',
1925
pedantic: 'warn',
2026
perf: 'warn',
2127
style: 'warn',
28+
// restriction: 'warn',
2229
},
2330
env: {
2431
browser: true,
@@ -31,6 +38,8 @@ export default defineConfig({
3138

3239
// Core
3340

41+
// 禁用禁止使用对象展开/剩余属性语法
42+
'oxc/no-rest-spread-properties': 'off',
3443
// 要求函数所有代码路径都有一致的返回值行为
3544
'consistent-return': 'off', // 交给 TS 的 noImplicitReturns 处理就好了
3645
// 要求注释以大写字母开头
@@ -249,11 +258,6 @@ export default defineConfig({
249258
'unicorn/prefer-add-event-listener': 'off',
250259
// 要求使用 globalThis 代替 window/global/self
251260
'unicorn/prefer-global-this': 'off',
252-
// 要求使用 import.meta 代替 __dirname/__filename
253-
// TODO: 使用 @rollup/plugin-typescript 加载 rollup 的时候
254-
// import.meta.dirname 在打包时斜杠会出错
255-
// 所以无法直接使用 import.meta.dirname,等之后重构打包流程再启用这规则
256-
'unicorn/prefer-import-meta-properties': 'off',
257261
// 要求使用 querySelector 代替其他 DOM 查询方法
258262
'unicorn/prefer-query-selector': 'off',
259263
// 要求使用顶层 await
@@ -327,6 +331,10 @@ export default defineConfig({
327331

328332
// Import
329333

334+
// 禁止使用默认导出
335+
'import/no-default-export': 'off',
336+
// 禁止模块之间的循环依赖
337+
'import/no-cycle': 'warn',
330338
// 强制一致地使用 type 导入风格,type 标注内联在导入语句中
331339
'import/consistent-type-specifier-style': ['error', 'prefer-inline'],
332340
// 要求所有 export 语句放在文件末尾
@@ -345,25 +353,20 @@ export default defineConfig({
345353
'import/no-unassigned-import': 'off',
346354
// 要求使用默认导出(export default)
347355
'import/prefer-default-export': 'off',
348-
// 禁止指定的导入模式
349-
'no-restricted-imports': [
356+
// 禁止通过相对路径或子模块形式导入 packlist 中的模块
357+
'restricted-relative-imports/no-restricted-relative-imports': [
350358
'warn',
351-
{
352-
patterns: [
353-
{
354-
// 匹配的导入路径模式组
355-
group: ['helper/**/*', '!helper/languages'],
356-
// 违例时的提示信息
357-
message: '只能直接通过 helper 导入',
358-
},
359-
{
360-
// 匹配的导入路径模式组
361-
group: ['**/request', '!request'],
362-
// 违例时的提示信息
363-
message: '必须直接导入',
364-
},
365-
],
366-
},
359+
Object.fromEntries(
360+
packlistData.packlist
361+
.filter((p) => p !== 'helper/languages')
362+
.map((p) => [
363+
p,
364+
{
365+
srcPath: `src/${p}`,
366+
...(p === 'helper' ? { allowed: ['helper/languages'] } : {}),
367+
},
368+
]),
369+
),
367370
],
368371
},
369372
overrides: [

package.json

Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
"type": "module",
1818
"main": "./ComicReader.umd.js",
1919
"scripts": {
20-
"dev": "rollup --config --watch --environment NODE_ENV:development --configPlugin @rollup/plugin-typescript --configImportAttributesKey with",
21-
"build": "rollup --config --configPlugin @rollup/plugin-typescript --configImportAttributesKey with",
22-
"release": "node release.mjs",
23-
"release:push": "node release.mjs push",
20+
"dev": "tsx scripts/build.ts --dev",
21+
"build": "tsx scripts/build.ts",
22+
"release": "tsx scripts/release.ts",
23+
"release:push": "tsx scripts/release.ts push",
2424
"test": "vitest",
25-
"check": "tsc -noEmit && oxlint -f stylish . && oxfmt . && stylelint \"**/*.css\"",
25+
"check": "tsc -noEmit && oxlint -f stylish --fix . && oxfmt . && stylelint \"**/*.css\"",
2626
"pwa-assets-generator": "pwa-assets-generator",
2727
"pwa:dev": "vite serve src/pwa",
2828
"pwa:build": "vite build src/pwa",
@@ -46,7 +46,7 @@
4646
"@tensorflow/tfjs-backend-webgpu": "^4.22.0",
4747
"browser-fs-access": "^0.38.0",
4848
"comlink": "^4.4.2",
49-
"fast-deep-equal": "^3.1.3",
49+
"dequal": "^2.0.3",
5050
"fflate": "^0.8.2",
5151
"file-type": "^21.1.1",
5252
"jsqr": "^1.4.0",
@@ -60,24 +60,9 @@
6060
"water.css": "^2.1.1"
6161
},
6262
"devDependencies": {
63-
"@babel/core": "^7.28.5",
64-
"@babel/plugin-proposal-import-attributes-to-assertions": "^7.27.1",
65-
"@babel/plugin-transform-runtime": "^7.28.5",
66-
"@babel/preset-env": "^7.28.5",
67-
"@babel/preset-typescript": "^7.28.5",
68-
"@babel/runtime": "^7.28.4",
69-
"@jackfranklin/rollup-plugin-markdown": "^0.4.0",
7063
"@percy/cli": "^1.31.5",
7164
"@percy/playwright": "^1.0.10",
7265
"@release-it/conventional-changelog": "^9",
73-
"@rollup/plugin-alias": "^6.0.0",
74-
"@rollup/plugin-babel": "^6.1.0",
75-
"@rollup/plugin-commonjs": "^29.0.0",
76-
"@rollup/plugin-json": "^6.1.0",
77-
"@rollup/plugin-node-resolve": "^16.0.3",
78-
"@rollup/plugin-replace": "^6.0.3",
79-
"@rollup/plugin-typescript": "^12.3.0",
80-
"@solidjs/router": "^0.15.4",
8166
"@storybook/test-runner": "^0.24.2",
8267
"@types/libarchive.js": "^2.0.1",
8368
"@types/mocha": "^10.0.10",
@@ -95,8 +80,11 @@
9580
"@wdio/visual-service": "^9.0.2",
9681
"autoprefixer": "^10.4.22",
9782
"axios": "^1.13.2",
98-
"babel-preset-solid": "^1.9.10",
83+
"browserslist": "^4.28.2",
84+
"browserslist-to-esbuild": "^2.1.1",
85+
"chalk": "^5.6.2",
9986
"cssnano": "^7.1.2",
87+
"dts-bundle-generator": "^9.5.1",
10088
"ehentai-api": "^0.0.4",
10189
"eslint-plugin-i18next": "^6.1.3",
10290
"eslint-plugin-solid": "^0.14.5",
@@ -107,19 +95,18 @@
10795
"oxlint": "^1.62.0",
10896
"oxlint-tsgolint": "^0.22.1",
10997
"playwright": "^1.57.0",
98+
"postcss": "^8.5.14",
11099
"postcss-import": "^16.1.1",
100+
"postcss-modules": "^6.0.1",
111101
"postcss-nesting": "^13.0.2",
112102
"radash": "^12.1.1",
113103
"release-it": "^19.0.5",
114104
"rfdc": "^1.4.1",
115-
"rollup": "4.53.3",
116-
"rollup-plugin-dts": "^6.3.0",
117-
"rollup-plugin-styles": "^4.0.0",
118-
"rollup-plugin-watch-external": "^1.0.2",
105+
"rolldown": "^1.0.0",
119106
"serve": "^14.2.5",
120107
"shelljs": "^0.10.0",
121108
"storybook": "^10.1.4",
122-
"storybook-solidjs-vite": "10.0.9",
109+
"storybook-solidjs-vite": "^10.0.12",
123110
"stylelint": "^16.26.1",
124111
"stylelint-config-clean-order": "^8.0.0",
125112
"stylelint-config-standard": "^39.0.1",
@@ -129,17 +116,16 @@
129116
"sync-fetch": "^0.5.2",
130117
"terser": "^5.44.1",
131118
"tslib": "^2.8.1",
119+
"tsx": "^4.21.0",
132120
"type-fest": "^5.3.0",
133121
"typescript": "^5.9.3",
134-
"typescript-eslint": "^8.48.1",
135-
"vite": "^7.2.6",
136-
"vite-plugin-pwa": "^1.2.0",
122+
"unplugin-solid": "^1.0.0",
123+
"vite": "^8.0.0",
124+
"vite-plugin-pwa": "^1.3.0",
137125
"vite-plugin-solid": "^2.11.10",
138-
"vite-tsconfig-paths": "^5.1.4",
139-
"vitepress": "1.6.4",
126+
"vitepress": "^2.0.0-alpha.17",
140127
"vitest": "^4.0.15",
141-
"wdio-vscode-service": "^6.1.4",
142-
"xo": "^1.2.3"
128+
"wdio-vscode-service": "^6.1.4"
143129
},
144130
"pnpm": {
145131
"neverBuiltDependencies": []

0 commit comments

Comments
 (0)