feat: support webpack profiling (#9804)

Co-authored-by: Martin Guillon <martin.guillon@akylas.fr>
This commit is contained in:
Igor Randjelovic
2022-03-03 10:22:28 +01:00
committed by GitHub
parent 151d6e8c85
commit af4b7e3b33
4 changed files with 41 additions and 1 deletions

View File

@ -109,4 +109,14 @@ describe('base configuration', () => {
force: true,
});
});
it('supports --env.profile', () => {
init({
platform: 'ios',
profile: true,
});
const config = base(new Config());
expect(config.get('profile')).toBe(true);
});
});

View File

@ -1,6 +1,6 @@
#!/usr/bin/env node
import { redBright, green, greenBright } from 'chalk';
import { redBright, green, greenBright, yellow } from 'chalk';
import { program } from 'commander';
import dedent from 'ts-dedent';
import webpack from 'webpack';
@ -115,6 +115,28 @@ program
errorDetails: env.verbose,
})
);
// if webpack profile is enabled we write the stats to a JSON file
if (configuration.profile || env.profile) {
console.log(
[
'',
'|',
`| The build profile has been written to ${yellow(
'webpack.stats.json'
)}`,
`| You can analyse the stats at ${green(
'https://webpack.github.io/analyse/'
)}`,
'|',
'',
].join('\n')
);
fs.writeFileSync(
path.join(process.cwd(), 'webpack.stats.json'),
JSON.stringify(stats.toJson())
);
}
}
};

View File

@ -222,6 +222,11 @@ export default function (config: Config, env: IWebpackEnv = _env): Config {
});
});
// enable profiling with --env.profile
config.when(env.profile, (config) => {
config.profile(true);
});
// worker-loader should be declared before ts-loader
config.module
.rule('workers')

View File

@ -43,6 +43,9 @@ export interface IWebpackEnv {
// enable verbose output
verbose?: boolean;
// enable webpack profiling
profile?: boolean;
// misc
replace?: string[] | string;
watchNodeModules?: boolean;