Skip to content

Commit 8f31674

Browse files
refactor: migrate on built-in logger
BREAKING CHANGE: `log`, `logLevel`, `logTime`, `noInfo`, `quiet`, `reporter` and `warn` options were removed in favor built-in webpack logger, please use https://webpack.js.org/configuration/other-options/#infrastructurelogginglevel for enable and setup logging output
1 parent 8235fd3 commit 8f31674

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+4148
-6448
lines changed

babel.config.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ module.exports = (api) => {
44
api.cache(true);
55

66
return {
7+
parserOpts: {
8+
// For `jest`
9+
allowReturnOutsideFunction: true,
10+
},
711
presets: ['@babel/preset-env'],
812
env: {
913
test: {

bin/options.js

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,17 +68,6 @@ const options = {
6868
group: DISPLAY_GROUP,
6969
describe: 'Enables/Disables colors on the console',
7070
},
71-
info: {
72-
type: 'boolean',
73-
group: DISPLAY_GROUP,
74-
default: true,
75-
describe: 'Info',
76-
},
77-
quiet: {
78-
type: 'boolean',
79-
group: DISPLAY_GROUP,
80-
describe: 'Quiet',
81-
},
8271
'client-log-level': {
8372
type: 'string',
8473
group: DISPLAY_GROUP,

bin/webpack-dev-server.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ const Server = require('../lib/Server');
1414
const setupExitSignals = require('../lib/utils/setupExitSignals');
1515
const colors = require('../lib/utils/colors');
1616
const processOptions = require('../lib/utils/processOptions');
17-
const createLogger = require('../lib/utils/createLogger');
1817
const getVersions = require('../lib/utils/getVersions');
1918
const options = require('./options');
2019

@@ -86,15 +85,13 @@ const config = require(convertArgvPath)(yargs, argv, {
8685
});
8786

8887
function startDevServer(config, options) {
89-
const log = createLogger(options);
90-
9188
let compiler;
9289

9390
try {
9491
compiler = webpack(config);
9592
} catch (err) {
9693
if (err instanceof webpack.WebpackOptionsValidationError) {
97-
log.error(colors.error(options.stats.colors, err.message));
94+
console.error(colors.error(options.stats.colors, err.message));
9895
// eslint-disable-next-line no-process-exit
9996
process.exit(1);
10097
}
@@ -103,11 +100,11 @@ function startDevServer(config, options) {
103100
}
104101

105102
try {
106-
server = new Server(compiler, options, log);
103+
server = new Server(compiler, options);
107104
serverData.server = server;
108105
} catch (err) {
109106
if (err.name === 'ValidationError') {
110-
log.error(colors.error(options.stats.colors, err.message));
107+
console.error(colors.error(options.stats.colors, err.message));
111108
// eslint-disable-next-line no-process-exit
112109
process.exit(1);
113110
}

lib/Server.js

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ const validateOptions = require('schema-utils');
2424
const isAbsoluteUrl = require('is-absolute-url');
2525
const normalizeOptions = require('./utils/normalizeOptions');
2626
const updateCompiler = require('./utils/updateCompiler');
27-
const createLogger = require('./utils/createLogger');
2827
const getCertificate = require('./utils/getCertificate');
2928
const status = require('./utils/status');
3029
const createDomain = require('./utils/createDomain');
@@ -38,16 +37,16 @@ if (!process.env.WEBPACK_DEV_SERVER) {
3837
}
3938

4039
class Server {
41-
constructor(compiler, options = {}, _log) {
40+
constructor(compiler, options = {}) {
4241
validateOptions(schema, options, 'webpack Dev Server');
4342

4443
this.compiler = compiler;
4544
this.options = options;
45+
this.logger = this.compiler.getInfrastructureLogger('webpack-dev-server');
4646
this.sockets = [];
4747
this.contentBaseWatchers = [];
4848
// Keep track of websocket proxies for external websocket upgrade.
4949
this.websocketProxies = [];
50-
this.log = _log || createLogger(options);
5150
// this value of ws can be overwritten for tests
5251
this.wsHeartbeatInterval = 30000;
5352

@@ -149,7 +148,9 @@ class Server {
149148
// middleware for serving webpack bundle
150149
this.middleware = webpackDevMiddleware(
151150
this.compiler,
152-
Object.assign({}, this.options, { logLevel: this.log.options.level })
151+
Object.assign({}, this.options, {
152+
logger: this.logger,
153+
})
153154
);
154155
}
155156

@@ -189,7 +190,26 @@ class Server {
189190
proxyOptions.context = correctedContext;
190191
}
191192

192-
proxyOptions.logLevel = proxyOptions.logLevel || 'warn';
193+
const getLogLevelForProxy = (level) => {
194+
if (level === 'none') {
195+
return 'silent';
196+
}
197+
198+
if (level === 'log') {
199+
return 'info';
200+
}
201+
202+
if (level === 'verbose') {
203+
return 'debug';
204+
}
205+
206+
return level;
207+
};
208+
209+
proxyOptions.logLevel = getLogLevelForProxy(
210+
this.compiler.options.infrastructureLogging.level
211+
);
212+
proxyOptions.logProvider = () => this.logger;
193213

194214
return proxyOptions;
195215
});
@@ -302,11 +322,11 @@ class Server {
302322
this.app.use(publicPath, express.static(item));
303323
});
304324
} else if (isAbsoluteUrl(String(contentBase))) {
305-
this.log.warn(
325+
this.logger.warn(
306326
'Using a URL as contentBase is deprecated and will be removed in the next major version. Please use the proxy option instead.'
307327
);
308328

309-
this.log.warn(
329+
this.logger.warn(
310330
'proxy: {\n\t"*": "<your current contentBase configuration>"\n}'
311331
);
312332

@@ -319,11 +339,11 @@ class Server {
319339
res.end();
320340
});
321341
} else if (typeof contentBase === 'number') {
322-
this.log.warn(
342+
this.logger.warn(
323343
'Using a number as contentBase is deprecated and will be removed in the next major version. Please use the proxy option instead.'
324344
);
325345

326-
this.log.warn(
346+
this.logger.warn(
327347
'proxy: {\n\t"*": "//localhost:<your current contentBase configuration>"\n}'
328348
);
329349

@@ -548,7 +568,7 @@ class Server {
548568
let fakeCert;
549569

550570
if (!this.options.https.key || !this.options.https.cert) {
551-
fakeCert = getCertificate(this.log);
571+
fakeCert = getCertificate(this.logger);
552572
}
553573

554574
this.options.https.key = this.options.https.key || fakeCert;
@@ -577,7 +597,7 @@ class Server {
577597
}
578598

579599
this.listeningApp.on('error', (err) => {
580-
this.log.error(err);
600+
this.logger.error(err);
581601
});
582602
}
583603

@@ -590,7 +610,7 @@ class Server {
590610
}
591611

592612
if (!headers) {
593-
this.log.warn(
613+
this.logger.warn(
594614
'transportMode.server implementation must pass headers to the callback of onConnection(f) ' +
595615
'via f(connection, headers) in order for clients to pass a headers security check'
596616
);
@@ -650,7 +670,7 @@ class Server {
650670
status(
651671
uri,
652672
this.options,
653-
this.log,
673+
this.logger,
654674
this.options.stats && this.options.stats.colors
655675
);
656676
}

lib/options.json

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -211,21 +211,9 @@
211211
"liveReload": {
212212
"type": "boolean"
213213
},
214-
"log": {
215-
"instanceof": "Function"
216-
},
217-
"logLevel": {
218-
"enum": ["info", "warn", "error", "debug", "trace", "silent"]
219-
},
220-
"logTime": {
221-
"type": "boolean"
222-
},
223214
"mimeTypes": {
224215
"type": "object"
225216
},
226-
"noInfo": {
227-
"type": "boolean"
228-
},
229217
"onAfterSetupMiddleware": {
230218
"instanceof": "Function"
231219
},
@@ -326,12 +314,6 @@
326314
"publicPath": {
327315
"type": "string"
328316
},
329-
"quiet": {
330-
"type": "boolean"
331-
},
332-
"reporter": {
333-
"instanceof": "Function"
334-
},
335317
"requestCert": {
336318
"type": "boolean"
337319
},
@@ -396,9 +378,6 @@
396378
"useLocalIp": {
397379
"type": "boolean"
398380
},
399-
"warn": {
400-
"instanceof": "Function"
401-
},
402381
"watchContentBase": {
403382
"type": "boolean"
404383
},
@@ -436,11 +415,7 @@
436415
"injectClient": "should be {Boolean|Function} (https://webpack.js.org/configuration/dev-server/#devserverinjectclient)",
437416
"injectHot": "should be {Boolean|Function} (https://webpack.js.org/configuration/dev-server/#devserverinjecthot)",
438417
"liveReload": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverlivereload-)",
439-
"log": "should be {Function}",
440-
"logLevel": "should be {String} and equal to one of the allowed values\n\n [ 'info', 'warn', 'error', 'debug', 'trace', 'silent' ]\n\n (https://github.com/webpack/webpack-dev-middleware#loglevel)",
441-
"logTime": "should be {Boolean} (https://github.com/webpack/webpack-dev-middleware#logtime)",
442418
"mimeTypes": "should be {Object} (https://webpack.js.org/configuration/dev-server/#devservermimetypes-)",
443-
"noInfo": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devservernoinfo-)",
444419
"onAfterSetupMiddleware": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserverafter)",
445420
"onBeforeSetupMiddleware": "should be {Function} (https://webpack.js.org/configuration/dev-server/#devserverbefore)",
446421
"onListening": "should be {Function} (https://webpack.js.org/configuration/dev-server/#onlistening)",
@@ -453,8 +428,6 @@
453428
"proxy": "should be {Object|Array} (https://webpack.js.org/configuration/dev-server/#devserverproxy)",
454429
"public": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserverpublic)",
455430
"publicPath": "should be {String} (https://webpack.js.org/configuration/dev-server/#devserverpublicpath-)",
456-
"quiet": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverquiet-)",
457-
"reporter": "should be {Function} (https://github.com/webpack/webpack-dev-middleware#reporter)",
458431
"requestCert": "should be {Boolean}",
459432
"contentBasePublicPath": "should be {String|Array} (https://webpack.js.org/configuration/dev-server/#devservercontentbasepublicpath)",
460433
"serveIndex": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverserveindex)",
@@ -464,7 +437,6 @@
464437
"stats": "should be {Object|Boolean} (https://webpack.js.org/configuration/dev-server/#devserverstats-)",
465438
"transportMode": "should be {String|Object} (https://webpack.js.org/configuration/dev-server/#devservertransportmode)",
466439
"useLocalIp": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserveruselocalip)",
467-
"warn": "should be {Function}",
468440
"watchContentBase": "should be {Boolean} (https://webpack.js.org/configuration/dev-server/#devserverwatchcontentbase)",
469441
"watchOptions": "should be {Object} (https://webpack.js.org/configuration/dev-server/#devserverwatchoptions-)",
470442
"writeToDisk": "should be {Boolean|Function} (https://webpack.js.org/configuration/dev-server/#devserverwritetodisk-)"

lib/servers/SockJSServer.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,18 @@ module.exports = class SockJSServer extends BaseServer {
3030
// options has: error (function), debug (function), server (http/s server), path (string)
3131
constructor(server) {
3232
super(server);
33+
3334
this.socket = sockjs.createServer({
3435
// Use provided up-to-date sockjs-client
3536
sockjs_url: '/__webpack_dev_server__/sockjs.bundle.js',
36-
// Limit useless logs
37+
// Default logger is very annoy. Limit useless logs.
3738
log: (severity, line) => {
3839
if (severity === 'error') {
39-
this.server.log.error(line);
40+
this.server.logger.error(line);
41+
} else if (severity === 'info') {
42+
this.server.logger.log(line);
4043
} else {
41-
this.server.log.debug(line);
44+
this.server.logger.debug(line);
4245
}
4346
},
4447
});

lib/servers/WebsocketServer.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const BaseServer = require('./BaseServer');
99
module.exports = class WebsocketServer extends BaseServer {
1010
constructor(server) {
1111
super(server);
12+
1213
this.wsServer = new ws.Server({
1314
noServer: true,
1415
path: this.server.options.clientOptions.path,
@@ -25,7 +26,7 @@ module.exports = class WebsocketServer extends BaseServer {
2526
});
2627

2728
this.wsServer.on('error', (err) => {
28-
this.server.log.error(err.message);
29+
this.server.logger.error(err.message);
2930
});
3031

3132
const noop = () => {};

lib/utils/createConfig.js

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -121,16 +121,6 @@ function createConfig(config, argv, { port }) {
121121
options.stats = Object.assign({}, options.stats, { colors: argv.color });
122122
}
123123

124-
// TODO remove in `v4`
125-
if (!argv.info) {
126-
options.noInfo = true;
127-
}
128-
129-
// TODO remove in `v4`
130-
if (argv.quiet) {
131-
options.quiet = true;
132-
}
133-
134124
if (argv.https) {
135125
options.https = true;
136126
}

lib/utils/createLogger.js

Lines changed: 0 additions & 23 deletions
This file was deleted.

lib/utils/runOpen.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
const open = require('open');
44
const isAbsoluteUrl = require('is-absolute-url');
55

6-
function runOpen(uri, options, log) {
6+
function runOpen(uri, options, logger) {
77
// https://github.com/webpack/webpack-dev-server/issues/1990
88
let openOptions = { wait: false };
99
let openOptionValue = '';
@@ -26,7 +26,7 @@ function runOpen(uri, options, log) {
2626
const pageUrl = page && isAbsoluteUrl(page) ? page : `${uri}${page}`;
2727

2828
return open(pageUrl, openOptions).catch(() => {
29-
log.warn(
29+
logger.warn(
3030
`Unable to open "${pageUrl}" in browser${openOptionValue}. If you are running in a headless environment, please do not use the --open flag`
3131
);
3232
});

0 commit comments

Comments
 (0)