Skip to content

Commit 77d5ca7

Browse files
xierenyuanCopilot
andauthored
feat: add removeConsole feature for console stripping in builds (#27)
* feat: add removeConsole feature for console stripping in builds * docs: update import paths from @kmi/kmijs to umi Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update packages/preset-bundler/src/features/removeConsole/removeConsole.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 33c5a57 commit 77d5ca7

File tree

7 files changed

+85
-12
lines changed

7 files changed

+85
-12
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ pnpm dev
152152
pnpm build
153153
```
154154

155+
If you find this helpful, welcome to give us a star ⭐️⭐️⭐️
156+
155157
## License
156158

157159
[MIT](./LICENSE)

README.zh-CN.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ pnpm dev
151151
pnpm build
152152
```
153153

154+
如果您觉得这个项目有帮助,欢迎给我们点个 star ⭐️⭐️⭐️
155+
154156
## 许可证
155157

156158
[MIT](./LICENSE)

docs/docs/config/config.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ export default defineConfig({
296296
比如将 node_modules 下的 `@m-ui/react` 库拆分到 `m-ui.js` 中:
297297

298298
```ts [config/config.ts]
299-
import { createDependenciesRegExp } from '@kmi/kmijs/plugin-utils'
299+
import { createDependenciesRegExp } from 'umi/plugin-utils'
300300

301301
export default defineConfig({
302302
codeSplitting: {
@@ -318,7 +318,7 @@ export default defineConfig({
318318
可以通过 `codeSplitting.override` 配置项来自定义 Rspack(Webpack) 拆包配置, 此配置会和 Rspack(Webpack) 的 splitChunks 配置进行合并(cacheGroups 配置也会合并)。比如:
319319

320320
```ts [config/config.ts]
321-
import { createDependenciesRegExp } from '@kmi/kmijs/plugin-utils'
321+
import { createDependenciesRegExp } from 'umi/plugin-utils'
322322

323323
export default defineConfig({
324324
codeSplitting: {

docs/docs/config/html-config.md

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,6 @@ links: [{ href: '/foo.css', rel: 'preload' }]
110110
```
111111

112112
```ts [config/config.ts]
113-
import { defineConfig } from '@kmi/kmijs'
114-
115113
export default defineConfig({
116114
links: [{ href: '/foo.css', rel: 'preload' }] // [!code ++]
117115
})
@@ -175,8 +173,6 @@ type MetaOptions = {
175173

176174
比如设置 description:
177175
```ts [config/config.ts]
178-
import { defineConfig } from '@kmi/kmijs'
179-
180176
export default defineConfig({
181177
metas: {
182178
description: 'a description of the page', // [!code ++]
@@ -203,8 +199,6 @@ type MetaOptions = {
203199
比如配置配置 X-UA-Compatible
204200

205201
```ts [config/config.ts]
206-
import { defineConfig } from '@kmi/kmijs'
207-
208202
export default defineConfig({
209203
metas: {
210204
'X-UA-Compatible': { // [!code ++]
@@ -233,8 +227,6 @@ type Metas = Array<HTMLMetaElement>
233227
示例:
234228
235229
```ts [config/config.ts]
236-
import { defineConfig } from '@kmi/kmijs'
237-
238230
export default defineConfig({
239231
metas: [
240232
{ name: 'keywords', content: 'kmi, kmijs' }, // [!code ++]

docs/docs/guide/rspack.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
从 Umi 的 `4.4.11` 版本起,在一个已有的 Umi 项目中,你仅需在 `config/config.ts` 中添加以下配置,即可启用 Rspack 构建:
1515

1616
```ts [config/config.ts]
17-
import { defineConfig } from '@kmi/kmijs';
18-
1917
export default defineConfig({
2018
// Configure Kmi preset
2119
presets: ['@kmijs/preset-bundler'],
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import type { IApi } from '@kmijs/types'
2+
3+
export default (api: IApi) => {
4+
api.describe({
5+
key: 'removeConsole',
6+
config: {
7+
schema({ zod }) {
8+
return zod.union([
9+
zod.boolean(),
10+
zod.array(zod.enum(['error', 'warn', 'info', 'log'])),
11+
])
12+
},
13+
},
14+
enableBy: api.EnableBy.config,
15+
})
16+
17+
api.onCheckConfig(({ userConfig }) => {
18+
if (userConfig.jsMinifier === 'uglifyJs') {
19+
throw new Error('removeConsole does not support uglifyJs')
20+
}
21+
if (api.appData.bundler === 'webpack' && userConfig.jsMinifier === 'swc') {
22+
throw new Error('removeConsole does not support using swc compression in webpack mode')
23+
}
24+
})
25+
26+
api.modifyConfig((memo) => {
27+
const { removeConsole } = memo
28+
const isRspack = api.appData.bundler === 'rspack'
29+
// Default is esbuild
30+
const jsMinifier =
31+
api.appData.bundler === 'rspack'
32+
? api.userConfig.jsMinifier || 'swc'
33+
: api.userConfig.jsMinifier || 'esbuild'
34+
35+
const compressOptions = Array.isArray(removeConsole)
36+
? { pure_funcs: removeConsole.map((method) => `console.${method}`) }
37+
: { drop_console: true }
38+
39+
if (isRspack && jsMinifier === 'swc') {
40+
memo.jsMinifierOptions = {
41+
...memo.jsMinifierOptions,
42+
minimizerOptions: {
43+
...memo.jsMinifierOptions?.minimizerOptions,
44+
compress: {
45+
...memo.jsMinifierOptions?.minimizerOptions?.compress,
46+
...compressOptions,
47+
},
48+
},
49+
}
50+
return memo
51+
}
52+
53+
// esbuild
54+
if (jsMinifier === 'esbuild') {
55+
const compressOptions = Array.isArray(removeConsole)
56+
? { pure: removeConsole.map((method) => `console.${method}`) }
57+
: { drop: ['console'] }
58+
memo.jsMinifierOptions = {
59+
...memo.jsMinifierOptions,
60+
...compressOptions,
61+
}
62+
return memo
63+
}
64+
65+
// terser
66+
if (jsMinifier === 'terser') {
67+
memo.jsMinifierOptions = {
68+
...memo.jsMinifierOptions,
69+
compress: {
70+
...memo.jsMinifierOptions?.compress,
71+
...compressOptions,
72+
},
73+
}
74+
return memo
75+
}
76+
return memo
77+
})
78+
}

packages/preset-bundler/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export default (api: IApi) => {
1616
require.resolve('./features/transformConfig'),
1717
require.resolve('./features/define/define'),
1818
require.resolve('./features/codeSplitting/codeSplitting'),
19+
require.resolve('./features/removeConsole/removeConsole'),
1920
// plugins
2021
require.resolve('@kmijs/plugin-svgr'),
2122

0 commit comments

Comments
 (0)