11const path = require ( "path" ) ;
22const chalk = require ( "chalk" ) ;
3+ const fs = require ( "fs" ) ;
34const fg = require ( "fast-glob" ) ;
45
56function detectDeadCode ( compilation , options ) {
@@ -14,26 +15,56 @@ function detectDeadCode(compilation, options) {
1415 if ( options . detectUnusedFiles ) {
1516 unusedFiles = includedFiles . filter ( file => ! compiledFiles [ file ] ) ;
1617
17- if ( Object . keys ( unusedFiles ) . length > 0 || options . log === "all ") {
18+ if ( Object . keys ( unusedFiles ) . length > 0 || options . log !== "none ") {
1819 logUnusedFiles ( unusedFiles ) ;
1920 }
2021 }
2122
2223 if ( options . detectUnusedExport ) {
2324 unusedExportMap = getUsedExportMap ( convertFilesToDict ( includedFiles ) , compilation , isWebpack5 ) ;
2425
25- if ( Object . keys ( unusedExportMap ) . length > 0 || options . log == "all " ) {
26+ if ( Object . keys ( unusedExportMap ) . length > 0 || options . log ! == "none " ) {
2627 logUnusedExportMap ( unusedExportMap ) ;
2728 }
2829 }
2930
31+ if ( options . exportJSON ) {
32+ let exportPath = "deadcode.json" ;
33+ try {
34+ fs . stat ( exportPath , err => {
35+ if ( err == null ) {
36+ fs . unlinkSync ( exportPath ) ;
37+ return exportResultToJSON ( exportPath , unusedFiles , unusedExportMap ) ;
38+ }
39+ if ( err . code === "ENOENT" ) {
40+ return exportResultToJSON ( exportPath , unusedFiles , unusedExportMap ) ;
41+ }
42+ } ) ;
43+ } catch ( error ) {
44+ console . error ( "export result to json error: " , error ) ;
45+ }
46+ }
47+
3048 if ( unusedFiles . length > 0 || unusedExportMap . length > 0 ) {
3149 if ( options . failOnHint ) {
3250 process . exit ( 2 ) ;
3351 }
3452 }
3553}
3654
55+ function exportResultToJSON ( exportPath , unusedFiles , unusedExports ) {
56+ const data = {
57+ unusedFiles,
58+ unusedExports,
59+ } ;
60+ fs . writeFile ( exportPath , JSON . stringify ( data , null , 2 ) , err => {
61+ if ( err ) {
62+ throw err ;
63+ }
64+ console . log ( exportPath + " is generated." ) ;
65+ } ) ;
66+ }
67+
3768function getPattern ( { context, patterns, exclude } ) {
3869 return patterns
3970 . map ( pattern => path . resolve ( context , pattern ) )
0 commit comments