diff --git a/README.md b/README.md index 96ba432..ed7b53d 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,8 @@ pnpm dev pnpm build ``` +If you find this helpful, welcome to give us a star ⭐️⭐️⭐️ + ## License [MIT](./LICENSE) diff --git a/README.zh-CN.md b/README.zh-CN.md index 9621c04..e78793b 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -151,6 +151,8 @@ pnpm dev pnpm build ``` +如果您觉得这个项目有帮助,欢迎给我们点个 star ⭐️⭐️⭐️ + ## 许可证 [MIT](./LICENSE) diff --git a/docs/docs/config/config.md b/docs/docs/config/config.md index e977979..34d3065 100644 --- a/docs/docs/config/config.md +++ b/docs/docs/config/config.md @@ -296,7 +296,7 @@ export default defineConfig({ 比如将 node_modules 下的 `@m-ui/react` 库拆分到 `m-ui.js` 中: ```ts [config/config.ts] -import { createDependenciesRegExp } from '@kmi/kmijs/plugin-utils' +import { createDependenciesRegExp } from 'umi/plugin-utils' export default defineConfig({ codeSplitting: { @@ -318,7 +318,7 @@ export default defineConfig({ 可以通过 `codeSplitting.override` 配置项来自定义 Rspack(Webpack) 拆包配置, 此配置会和 Rspack(Webpack) 的 splitChunks 配置进行合并(cacheGroups 配置也会合并)。比如: ```ts [config/config.ts] -import { createDependenciesRegExp } from '@kmi/kmijs/plugin-utils' +import { createDependenciesRegExp } from 'umi/plugin-utils' export default defineConfig({ codeSplitting: { diff --git a/docs/docs/config/html-config.md b/docs/docs/config/html-config.md index d247742..e2fd32b 100644 --- a/docs/docs/config/html-config.md +++ b/docs/docs/config/html-config.md @@ -110,8 +110,6 @@ links: [{ href: '/foo.css', rel: 'preload' }] ``` ```ts [config/config.ts] -import { defineConfig } from '@kmi/kmijs' - export default defineConfig({ links: [{ href: '/foo.css', rel: 'preload' }] // [!code ++] }) @@ -175,8 +173,6 @@ type MetaOptions = { 比如设置 description: ```ts [config/config.ts] -import { defineConfig } from '@kmi/kmijs' - export default defineConfig({ metas: { description: 'a description of the page', // [!code ++] @@ -203,8 +199,6 @@ type MetaOptions = { 比如配置配置 X-UA-Compatible ```ts [config/config.ts] -import { defineConfig } from '@kmi/kmijs' - export default defineConfig({ metas: { 'X-UA-Compatible': { // [!code ++] @@ -233,8 +227,6 @@ type Metas = Array 示例: ```ts [config/config.ts] -import { defineConfig } from '@kmi/kmijs' - export default defineConfig({ metas: [ { name: 'keywords', content: 'kmi, kmijs' }, // [!code ++] diff --git a/docs/docs/guide/rspack.md b/docs/docs/guide/rspack.md index 70b7b33..042fdf8 100644 --- a/docs/docs/guide/rspack.md +++ b/docs/docs/guide/rspack.md @@ -14,8 +14,6 @@ 从 Umi 的 `4.4.11` 版本起,在一个已有的 Umi 项目中,你仅需在 `config/config.ts` 中添加以下配置,即可启用 Rspack 构建: ```ts [config/config.ts] -import { defineConfig } from '@kmi/kmijs'; - export default defineConfig({ // Configure Kmi preset presets: ['@kmijs/preset-bundler'], diff --git a/packages/preset-bundler/src/features/removeConsole/removeConsole.ts b/packages/preset-bundler/src/features/removeConsole/removeConsole.ts new file mode 100644 index 0000000..d179a84 --- /dev/null +++ b/packages/preset-bundler/src/features/removeConsole/removeConsole.ts @@ -0,0 +1,78 @@ +import type { IApi } from '@kmijs/types' + +export default (api: IApi) => { + api.describe({ + key: 'removeConsole', + config: { + schema({ zod }) { + return zod.union([ + zod.boolean(), + zod.array(zod.enum(['error', 'warn', 'info', 'log'])), + ]) + }, + }, + enableBy: api.EnableBy.config, + }) + + api.onCheckConfig(({ userConfig }) => { + if (userConfig.jsMinifier === 'uglifyJs') { + throw new Error('removeConsole does not support uglifyJs') + } + if (api.appData.bundler === 'webpack' && userConfig.jsMinifier === 'swc') { + throw new Error('removeConsole does not support using swc compression in webpack mode') + } + }) + + api.modifyConfig((memo) => { + const { removeConsole } = memo + const isRspack = api.appData.bundler === 'rspack' + // Default is esbuild + const jsMinifier = + api.appData.bundler === 'rspack' + ? api.userConfig.jsMinifier || 'swc' + : api.userConfig.jsMinifier || 'esbuild' + + const compressOptions = Array.isArray(removeConsole) + ? { pure_funcs: removeConsole.map((method) => `console.${method}`) } + : { drop_console: true } + + if (isRspack && jsMinifier === 'swc') { + memo.jsMinifierOptions = { + ...memo.jsMinifierOptions, + minimizerOptions: { + ...memo.jsMinifierOptions?.minimizerOptions, + compress: { + ...memo.jsMinifierOptions?.minimizerOptions?.compress, + ...compressOptions, + }, + }, + } + return memo + } + + // esbuild + if (jsMinifier === 'esbuild') { + const compressOptions = Array.isArray(removeConsole) + ? { pure: removeConsole.map((method) => `console.${method}`) } + : { drop: ['console'] } + memo.jsMinifierOptions = { + ...memo.jsMinifierOptions, + ...compressOptions, + } + return memo + } + + // terser + if (jsMinifier === 'terser') { + memo.jsMinifierOptions = { + ...memo.jsMinifierOptions, + compress: { + ...memo.jsMinifierOptions?.compress, + ...compressOptions, + }, + } + return memo + } + return memo + }) +} diff --git a/packages/preset-bundler/src/index.ts b/packages/preset-bundler/src/index.ts index a6df9ac..f4d3c10 100644 --- a/packages/preset-bundler/src/index.ts +++ b/packages/preset-bundler/src/index.ts @@ -16,6 +16,7 @@ export default (api: IApi) => { require.resolve('./features/transformConfig'), require.resolve('./features/define/define'), require.resolve('./features/codeSplitting/codeSplitting'), + require.resolve('./features/removeConsole/removeConsole'), // plugins require.resolve('@kmijs/plugin-svgr'),