ui
This commit is contained in:
+15
@@ -0,0 +1,15 @@
|
||||
const WebpackCLI = require("./webpack-cli");
|
||||
|
||||
const runCLI = async (args) => {
|
||||
// Create a new instance of the CLI object
|
||||
const cli = new WebpackCLI();
|
||||
|
||||
try {
|
||||
await cli.run(args);
|
||||
} catch (error) {
|
||||
cli.logger.error(error);
|
||||
process.exit(2);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = runCLI;
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
const CLI = require("./webpack-cli");
|
||||
|
||||
module.exports = CLI;
|
||||
// TODO remove after drop `@webpack-cli/migrate`
|
||||
module.exports.utils = { logger: console };
|
||||
+132
@@ -0,0 +1,132 @@
|
||||
class CLIPlugin {
|
||||
constructor(options) {
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
setupHotPlugin(compiler) {
|
||||
const { HotModuleReplacementPlugin } = compiler.webpack || require("webpack");
|
||||
const hotModuleReplacementPlugin = Boolean(
|
||||
compiler.options.plugins.find((plugin) => plugin instanceof HotModuleReplacementPlugin),
|
||||
);
|
||||
|
||||
if (!hotModuleReplacementPlugin) {
|
||||
new HotModuleReplacementPlugin().apply(compiler);
|
||||
}
|
||||
}
|
||||
|
||||
setupPrefetchPlugin(compiler) {
|
||||
const { PrefetchPlugin } = compiler.webpack || require("webpack");
|
||||
|
||||
new PrefetchPlugin(null, this.options.prefetch).apply(compiler);
|
||||
}
|
||||
|
||||
async setupBundleAnalyzerPlugin(compiler) {
|
||||
// eslint-disable-next-line node/no-extraneous-require
|
||||
const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");
|
||||
const bundleAnalyzerPlugin = Boolean(
|
||||
compiler.options.plugins.find((plugin) => plugin instanceof BundleAnalyzerPlugin),
|
||||
);
|
||||
|
||||
if (!bundleAnalyzerPlugin) {
|
||||
new BundleAnalyzerPlugin().apply(compiler);
|
||||
}
|
||||
}
|
||||
|
||||
setupProgressPlugin(compiler) {
|
||||
const { ProgressPlugin } = compiler.webpack || require("webpack");
|
||||
const progressPlugin = Boolean(
|
||||
compiler.options.plugins.find((plugin) => plugin instanceof ProgressPlugin),
|
||||
);
|
||||
|
||||
if (!progressPlugin) {
|
||||
new ProgressPlugin({
|
||||
profile: this.options.progress === "profile",
|
||||
}).apply(compiler);
|
||||
}
|
||||
}
|
||||
|
||||
setupHelpfulOutput(compiler) {
|
||||
const pluginName = "webpack-cli";
|
||||
const getCompilationName = () => (compiler.name ? `'${compiler.name}'` : "");
|
||||
const logCompilation = (message) => {
|
||||
if (process.env.WEBPACK_CLI_START_FINISH_FORCE_LOG) {
|
||||
process.stderr.write(message);
|
||||
} else {
|
||||
this.logger.log(message);
|
||||
}
|
||||
};
|
||||
|
||||
const { configPath } = this.options;
|
||||
|
||||
compiler.hooks.run.tap(pluginName, () => {
|
||||
const name = getCompilationName();
|
||||
|
||||
logCompilation(`Compiler${name ? ` ${name}` : ""} starting... `);
|
||||
|
||||
if (configPath) {
|
||||
this.logger.log(`Compiler${name ? ` ${name}` : ""} is using config: '${configPath}'`);
|
||||
}
|
||||
});
|
||||
|
||||
compiler.hooks.watchRun.tap(pluginName, (compiler) => {
|
||||
const { bail, watch } = compiler.options;
|
||||
|
||||
if (bail && watch) {
|
||||
this.logger.warn(
|
||||
'You are using "bail" with "watch". "bail" will still exit webpack when the first error is found.',
|
||||
);
|
||||
}
|
||||
|
||||
const name = getCompilationName();
|
||||
|
||||
logCompilation(`Compiler${name ? ` ${name}` : ""} starting... `);
|
||||
|
||||
if (configPath) {
|
||||
this.logger.log(`Compiler${name ? ` ${name}` : ""} is using config: '${configPath}'`);
|
||||
}
|
||||
});
|
||||
|
||||
compiler.hooks.invalid.tap(pluginName, (filename, changeTime) => {
|
||||
const date = new Date(changeTime * 1000);
|
||||
|
||||
this.logger.log(`File '${filename}' was modified`);
|
||||
this.logger.log(`Changed time is ${date} (timestamp is ${changeTime})`);
|
||||
});
|
||||
|
||||
(compiler.webpack ? compiler.hooks.afterDone : compiler.hooks.done).tap(pluginName, () => {
|
||||
const name = getCompilationName();
|
||||
|
||||
logCompilation(`Compiler${name ? ` ${name}` : ""} finished`);
|
||||
|
||||
process.nextTick(() => {
|
||||
if (compiler.watchMode) {
|
||||
this.logger.log(`Compiler${name ? `${name}` : ""} is watching files for updates...`);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
apply(compiler) {
|
||||
this.logger = compiler.getInfrastructureLogger("webpack-cli");
|
||||
|
||||
if (this.options.progress) {
|
||||
this.setupProgressPlugin(compiler);
|
||||
}
|
||||
|
||||
if (this.options.hot) {
|
||||
this.setupHotPlugin(compiler);
|
||||
}
|
||||
|
||||
if (this.options.prefetch) {
|
||||
this.setupPrefetchPlugin(compiler);
|
||||
}
|
||||
|
||||
if (this.options.analyze) {
|
||||
this.setupBundleAnalyzerPlugin(compiler);
|
||||
}
|
||||
|
||||
this.setupHelpfulOutput(compiler);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = CLIPlugin;
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
function dynamicImportLoader() {
|
||||
let importESM;
|
||||
|
||||
try {
|
||||
importESM = new Function("id", "return import(id);");
|
||||
} catch (e) {
|
||||
importESM = null;
|
||||
}
|
||||
|
||||
return importESM;
|
||||
}
|
||||
|
||||
module.exports = dynamicImportLoader;
|
||||
+2343
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user