|
1 | 1 | import { devServerOptionsType } from "./types";
|
2 | 2 |
|
| 3 | +const WEBPACK_PACKAGE = process.env.WEBPACK_PACKAGE || "webpack"; |
| 4 | +const WEBPACK_DEV_SERVER_PACKAGE = process.env.WEBPACK_DEV_SERVER_PACKAGE || "webpack-dev-server"; |
| 5 | + |
3 | 6 | class ServeCommand {
|
4 | 7 | // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
|
5 | 8 | async apply(cli: any): Promise<void> {
|
6 |
| - const { logger, webpack } = cli; |
7 |
| - |
8 | 9 | const loadDevServerOptions = () => {
|
9 | 10 | // TODO simplify this after drop webpack v4 and webpack-dev-server v3
|
10 |
| - // eslint-disable-next-line @typescript-eslint/no-var-requires, node/no-extraneous-require |
11 |
| - const devServer = require("webpack-dev-server"); |
| 11 | + // eslint-disable-next-line @typescript-eslint/no-var-requires |
| 12 | + const devServer = require(WEBPACK_DEV_SERVER_PACKAGE); |
12 | 13 | const isNewDevServerCLIAPI = typeof devServer.schema !== "undefined";
|
13 | 14 |
|
14 | 15 | let options = {};
|
15 | 16 |
|
16 | 17 | if (isNewDevServerCLIAPI) {
|
17 |
| - if (webpack.cli && typeof webpack.cli.getArguments === "function") { |
18 |
| - options = webpack.cli.getArguments(devServer.schema); |
| 18 | + if (cli.webpack.cli && typeof cli.webpack.cli.getArguments === "function") { |
| 19 | + options = cli.webpack.cli.getArguments(devServer.schema); |
19 | 20 | } else {
|
20 | 21 | options = devServer.cli.getArguments();
|
21 | 22 | }
|
22 | 23 | } else {
|
23 |
| - // eslint-disable-next-line node/no-extraneous-require |
24 |
| - options = require("webpack-dev-server/bin/cli-flags"); |
| 24 | + options = require(`${WEBPACK_DEV_SERVER_PACKAGE}/bin/cli-flags`); |
25 | 25 | }
|
26 | 26 |
|
27 | 27 | // Old options format
|
@@ -50,15 +50,17 @@ class ServeCommand {
|
50 | 50 | description: "Run the webpack dev server.",
|
51 | 51 | usage: "[entries...] [options]",
|
52 | 52 | pkg: "@webpack-cli/serve",
|
53 |
| - dependencies: ["webpack-dev-server"], |
| 53 | + dependencies: [WEBPACK_PACKAGE, WEBPACK_DEV_SERVER_PACKAGE], |
54 | 54 | },
|
55 |
| - () => { |
| 55 | + async () => { |
56 | 56 | let devServerFlags = [];
|
57 | 57 |
|
| 58 | + cli.webpack = await cli.loadWebpack(); |
| 59 | + |
58 | 60 | try {
|
59 | 61 | devServerFlags = loadDevServerOptions();
|
60 | 62 | } catch (error) {
|
61 |
| - logger.error( |
| 63 | + cli.logger.error( |
62 | 64 | `You need to install 'webpack-dev-server' for running 'webpack serve'.\n${error}`,
|
63 | 65 | );
|
64 | 66 | process.exit(2);
|
@@ -159,17 +161,17 @@ class ServeCommand {
|
159 | 161 | process.stdin.resume();
|
160 | 162 | }
|
161 | 163 |
|
162 |
| - // eslint-disable-next-line @typescript-eslint/no-var-requires, node/no-extraneous-require |
163 |
| - const DevServer = require("webpack-dev-server"); |
| 164 | + // eslint-disable-next-line @typescript-eslint/no-var-requires |
| 165 | + const DevServer = require(WEBPACK_DEV_SERVER_PACKAGE); |
164 | 166 | const isNewDevServerCLIAPI = typeof DevServer.schema !== "undefined";
|
165 | 167 |
|
166 | 168 | let devServerVersion;
|
167 | 169 |
|
168 | 170 | try {
|
169 |
| - // eslint-disable-next-line node/no-extraneous-require, @typescript-eslint/no-var-requires |
170 |
| - devServerVersion = require("webpack-dev-server/package.json").version; |
| 171 | + // eslint-disable-next-line @typescript-eslint/no-var-requires |
| 172 | + devServerVersion = require(`${WEBPACK_DEV_SERVER_PACKAGE}/package.json`).version; |
171 | 173 | } catch (err) {
|
172 |
| - logger.error( |
| 174 | + cli.logger.error( |
173 | 175 | `You need to install 'webpack-dev-server' for running 'webpack serve'.\n${err}`,
|
174 | 176 | );
|
175 | 177 | process.exit(2);
|
@@ -200,8 +202,8 @@ class ServeCommand {
|
200 | 202 | }, {});
|
201 | 203 | const result = { ...(compilerForDevServer.options.devServer || {}) };
|
202 | 204 | const problems = (
|
203 |
| - webpack.cli && typeof webpack.cli.processArguments === "function" |
204 |
| - ? webpack.cli |
| 205 | + cli.webpack.cli && typeof cli.webpack.cli.processArguments === "function" |
| 206 | + ? cli.webpack.cli |
205 | 207 | : DevServer.cli
|
206 | 208 | ).processArguments(args, result, values);
|
207 | 209 |
|
@@ -335,9 +337,9 @@ class ServeCommand {
|
335 | 337 | servers.push(server);
|
336 | 338 | } catch (error) {
|
337 | 339 | if (cli.isValidationError(error)) {
|
338 |
| - logger.error(error.message); |
| 340 | + cli.logger.error(error.message); |
339 | 341 | } else {
|
340 |
| - logger.error(error); |
| 342 | + cli.logger.error(error); |
341 | 343 | }
|
342 | 344 |
|
343 | 345 | process.exit(2);
|
|
0 commit comments