mirror of https://github.com/alibaba/ice.git
				
				
				
			feat: enhance dropLogLevel build config (#6376)
* feat: 增强droplog功能 * fix: 修改warn说明 * fix: 补充md文件 --------- Co-authored-by: ClarkXia <xiawenwu41@gmail.com>
This commit is contained in:
		
							parent
							
								
									ae705c03e8
								
							
						
					
					
						commit
						f58e0c16d5
					
				|  | @ -185,7 +185,7 @@ const userConfig = [ | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     name: 'dropLogLevel', |     name: 'dropLogLevel', | ||||||
|     validation: 'string', |     validation: 'boolean|array|string', | ||||||
|     setConfig: (config: Config, dropLogLevel: UserConfig['dropLogLevel']) => { |     setConfig: (config: Config, dropLogLevel: UserConfig['dropLogLevel']) => { | ||||||
|       const levels = { |       const levels = { | ||||||
|         trace: 0, |         trace: 0, | ||||||
|  | @ -195,17 +195,38 @@ const userConfig = [ | ||||||
|         warn: 3, |         warn: 3, | ||||||
|         error: 4, |         error: 4, | ||||||
|       }; |       }; | ||||||
|  |       if (typeof dropLogLevel === 'string') { | ||||||
|         const level = levels[dropLogLevel]; |         const level = levels[dropLogLevel]; | ||||||
|         if (typeof level === 'number') { |         if (typeof level === 'number') { | ||||||
|           return mergeDefaultValue(config, 'minimizerOptions', { |           return mergeDefaultValue(config, 'minimizerOptions', { | ||||||
|             compress: { |             compress: { | ||||||
|               pure_funcs: Object.keys(levels) |               pure_funcs: Object.keys(levels) | ||||||
|                 .filter((methodName) => levels[methodName] <= level) |                 .filter((methodName) => levels[methodName] <= level) | ||||||
|               .map(methodName => `console.${methodName}`), |                 .map((methodName) => `console.${methodName}`), | ||||||
|             }, |             }, | ||||||
|           }); |           }); | ||||||
|         } else { |         } else { | ||||||
|         logger.warn(`dropLogLevel only support [${Object.keys(levels).join(',')}]`); |           logger.warn( | ||||||
|  |             `If you use a string as the attribute value of dropLogLevel you should enter one of the following strings [${Object.keys( | ||||||
|  |               levels, | ||||||
|  |             ).join(',')}]`,
 | ||||||
|  |           ); | ||||||
|  |         } | ||||||
|  |       } else if (dropLogLevel === true) { | ||||||
|  |         return mergeDefaultValue(config, 'minimizerOptions', { | ||||||
|  |           compress: { | ||||||
|  |             drop_console: true, | ||||||
|  |           }, | ||||||
|  |         }); | ||||||
|  |       } else if (Array.isArray(dropLogLevel)) { | ||||||
|  |         const pureFuncs = dropLogLevel.map((method) => `console.${method}`); | ||||||
|  |         return mergeDefaultValue(config, 'minimizerOptions', { | ||||||
|  |           compress: { | ||||||
|  |             pure_funcs: pureFuncs, | ||||||
|  |           }, | ||||||
|  |         }); | ||||||
|  |       } else if (dropLogLevel !== false) { | ||||||
|  |         logger.warn('dropLogLevel support boolean, array and string'); | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|   }, |   }, | ||||||
|  | @ -218,7 +239,9 @@ const userConfig = [ | ||||||
|       if (customValue === true) { |       if (customValue === true) { | ||||||
|         compileRegex = /node_modules\/*/; |         compileRegex = /node_modules\/*/; | ||||||
|       } else if (customValue && customValue.length > 0) { |       } else if (customValue && customValue.length > 0) { | ||||||
|         compileRegex = new RegExp(customValue.map((dep: string | RegExp) => { |         compileRegex = new RegExp( | ||||||
|  |           customValue | ||||||
|  |             .map((dep: string | RegExp) => { | ||||||
|               if (dep instanceof RegExp) { |               if (dep instanceof RegExp) { | ||||||
|                 return dep.source; |                 return dep.source; | ||||||
|               } else if (typeof dep === 'string') { |               } else if (typeof dep === 'string') { | ||||||
|  | @ -227,7 +250,10 @@ const userConfig = [ | ||||||
|                 return matchStr; |                 return matchStr; | ||||||
|               } |               } | ||||||
|               return false; |               return false; | ||||||
|         }).filter(Boolean).join('|')); |             }) | ||||||
|  |             .filter(Boolean) | ||||||
|  |             .join('|'), | ||||||
|  |         ); | ||||||
|       } |       } | ||||||
|       if (compileRegex) { |       if (compileRegex) { | ||||||
|         config.compileIncludes = [compileRegex]; |         config.compileIncludes = [compileRegex]; | ||||||
|  | @ -363,7 +389,9 @@ const userConfig = [ | ||||||
|     setConfig: (config: Config, codeSplitting: UserConfig['codeSplitting'], context: UserConfigContext) => { |     setConfig: (config: Config, codeSplitting: UserConfig['codeSplitting'], context: UserConfigContext) => { | ||||||
|       const { originalUserConfig } = context; |       const { originalUserConfig } = context; | ||||||
|       if ('splitChunks' in originalUserConfig) { |       if ('splitChunks' in originalUserConfig) { | ||||||
|         logger.warn('splitChunks is deprecated, please use codeSplitting instead.https://ice.work/docs/guide/basic/config#codesplitting'); |         logger.warn( | ||||||
|  |           'splitChunks is deprecated, please use codeSplitting instead.https://ice.work/docs/guide/basic/config#codesplitting', | ||||||
|  |         ); | ||||||
|       } else { |       } else { | ||||||
|         // When codeSplitting is set to false / router, do not config splitChunks.
 |         // When codeSplitting is set to false / router, do not config splitChunks.
 | ||||||
|         if (codeSplitting === false || codeSplitting === 'page') { |         if (codeSplitting === false || codeSplitting === 'page') { | ||||||
|  | @ -466,8 +494,4 @@ function defineConfig(config: UserConfig | (() => UserConfig)) { | ||||||
|   return config || defaultUserConfig; |   return config || defaultUserConfig; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export { | export { defineConfig, userConfig, cliOption }; | ||||||
|   defineConfig, |  | ||||||
|   userConfig, |  | ||||||
|   cliOption, |  | ||||||
| }; |  | ||||||
|  |  | ||||||
|  | @ -30,6 +30,8 @@ interface IgnorePattern { | ||||||
| 
 | 
 | ||||||
| type DistType = 'javascript' | 'html'; | type DistType = 'javascript' | 'html'; | ||||||
| 
 | 
 | ||||||
|  | type DropType = 'trace' | 'debug' | 'log' | 'info' | 'warn' | 'error'; | ||||||
|  | 
 | ||||||
| interface Fetcher { | interface Fetcher { | ||||||
|   packageName: string; |   packageName: string; | ||||||
|   method?: string; |   method?: string; | ||||||
|  | @ -140,7 +142,7 @@ export interface UserConfig { | ||||||
|    * `console.*` will be dropped when build. |    * `console.*` will be dropped when build. | ||||||
|    * @see https://v3.ice.work/docs/guide/basic/config#droploglevel
 |    * @see https://v3.ice.work/docs/guide/basic/config#droploglevel
 | ||||||
|    */ |    */ | ||||||
|   dropLogLevel?: 'trace' | 'debug' | 'log' | 'info' | 'warn' | 'error'; |   dropLogLevel?: DropType[] | DropType | boolean; | ||||||
|   /** |   /** | ||||||
|    * Minify build output, it only works in prod mode by default. |    * Minify build output, it only works in prod mode by default. | ||||||
|    * @see https://v3.ice.work/docs/guide/basic/config#minify
 |    * @see https://v3.ice.work/docs/guide/basic/config#minify
 | ||||||
|  | @ -248,9 +250,11 @@ export interface UserConfig { | ||||||
|    * generate additional assets for request data, default is true |    * generate additional assets for request data, default is true | ||||||
|    * @see https://v3.ice.work/docs/guide/basic/config#dataloader
 |    * @see https://v3.ice.work/docs/guide/basic/config#dataloader
 | ||||||
|    */ |    */ | ||||||
|   dataLoader?: { |   dataLoader?: | ||||||
|  |     | { | ||||||
|         fetcher?: Fetcher; |         fetcher?: Fetcher; | ||||||
|   } | Boolean; |       } | ||||||
|  |     | Boolean; | ||||||
|   /** |   /** | ||||||
|    * Enable cross-origin loading of chunks. |    * Enable cross-origin loading of chunks. | ||||||
|    * @see https://v3.ice.work/docs/guide/basic/config#crossoriginloading
 |    * @see https://v3.ice.work/docs/guide/basic/config#crossoriginloading
 | ||||||
|  |  | ||||||
|  | @ -240,11 +240,27 @@ export default defineConfig(() => ({ | ||||||
| 
 | 
 | ||||||
| ### dropLogLevel | ### dropLogLevel | ||||||
| 
 | 
 | ||||||
| - 类型:`'trace' | 'debug' | 'log' | 'warn' | 'error'` | - 类型:`boolean | DropType[] | DropType` | ||||||
| - 默认值:`null`,不移除任何 console 代码 | - 默认值:`false`,不移除任何 console 代码 | ||||||
| 
 | 
 | ||||||
| 压缩代码时移除 console.* 相关代码,比如配置了 log 则会移除 console.trace | 压缩代码时移除 console.* 相关代码,配置为true时,移除所有console.*相关代码。当想移除部分console代码,例如想要移除console.log和console.error时,可以配置为 | ||||||
| 、console.debug、console.log 代码。 | ```js | ||||||
|  | import { defineConfig } from '@ice/app'; | ||||||
|  | 
 | ||||||
|  | export default defineConfig(() => ({ | ||||||
|  |    dropLog: ['error', 'log'], | ||||||
|  | })); | ||||||
|  | ``` | ||||||
|  | 也可以根据console等级来进行移除 | ||||||
|  | ```js | ||||||
|  | // console 等级为 trace < debug < log < info < warn < error | ||||||
|  | // 例如想要移除trace、debug、log时可以像下面这样配置 | ||||||
|  | import { defineConfig } from '@ice/app'; | ||||||
|  | 
 | ||||||
|  | export default defineConfig(() => ({ | ||||||
|  |    dropLog: 'log', | ||||||
|  | })); | ||||||
|  | ``` | ||||||
| 
 | 
 | ||||||
| ### compileDependencies | ### compileDependencies | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue