forked from webpack/webpack-cli
/
parseArgs.ts
59 lines (50 loc) · 1.71 KB
/
parseArgs.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { utils } from 'webpack-cli';
const { logger } = utils;
type WebpackCLIType = {
getCoreFlags: Function;
argParser: Function;
};
type ArgsType = {
devServerArgs: object;
webpackArgs: object;
};
/**
*
* Parses raw dev server CLI args
*
* @param {Object} cli - webpack CLI object
* @param {Object[]} devServerFlags - devServer flags
* @param {String[]} args - unparsed devServer args processed from the CLI
*
* @returns {Object} parsed webpack args and dev server args objects
*/
export default function parseArgs(cli: WebpackCLIType, args: string[]): ArgsType {
let devServerFlags: object[];
try {
// eslint-disable-next-line node/no-extraneous-require
devServerFlags = require('webpack-dev-server/bin/cli-flags').devServer;
} catch (err) {
throw new Error(`You need to install 'webpack-dev-server' for running 'webpack serve'.\n${err}`);
}
const core = cli.getCoreFlags();
const parsedDevServerArgs = cli.argParser(devServerFlags, args, true);
const devServerArgs = parsedDevServerArgs.opts;
const parsedWebpackArgs = cli.argParser(core, parsedDevServerArgs.unknownArgs, true, process.title);
const webpackArgs = parsedWebpackArgs.opts;
// pass along the 'hot' argument to the dev server if it exists
if (webpackArgs && webpackArgs.hot !== undefined) {
devServerArgs['hot'] = webpackArgs.hot;
}
if (parsedWebpackArgs.unknownArgs.length > 0) {
parsedWebpackArgs.unknownArgs
.filter((e) => e)
.forEach((unknown) => {
logger.error(`Unknown argument: ${unknown}`);
});
process.exit(2);
}
return {
devServerArgs,
webpackArgs,
};
}