Skip to content

Commit

Permalink
refactor: migrate advanced group (#1863)
Browse files Browse the repository at this point in the history
Co-authored-by: Anshuman Verma <anshu.av97@gmail.com>
  • Loading branch information
snitin315 and anshumanv committed Oct 4, 2020
1 parent 3efbaf4 commit 83a2dd2
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 95 deletions.
42 changes: 0 additions & 42 deletions packages/webpack-cli/__tests__/AdvancedGroup.test.js

This file was deleted.

30 changes: 30 additions & 0 deletions packages/webpack-cli/__tests__/resolveAdvanced.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const resolveAdvanced = require('../lib/groups/resolveAdvanced');

const targetValues = ['web', 'webworker', 'node', 'async-node', 'node-webkit', 'electron-main', 'electron-renderer', 'electron-preload'];

describe('advanced options', function () {
it('should load the HMR plugin', () => {
const result = resolveAdvanced({
hot: true,
});
expect(result.options.plugins[0].constructor.name).toEqual('HotModuleReplacementPlugin');
});

it('should load the prefetch plugin', () => {
const result = resolveAdvanced({
prefetch: 'url',
});
expect(result.options.plugins[0].constructor.name).toEqual('PrefetchPlugin');
});

{
targetValues.map((option) => {
it(`should handle ${option} option`, () => {
const result = resolveAdvanced({
target: option,
});
expect(result.options.target).toEqual(option);
});
});
}
});
41 changes: 0 additions & 41 deletions packages/webpack-cli/lib/groups/AdvancedGroup.js

This file was deleted.

38 changes: 38 additions & 0 deletions packages/webpack-cli/lib/groups/resolveAdvanced.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/**
* Resolve advanced flags
* @param {args} args - Parsed args passed to CLI
*/
const resolveAdvanced = (args) => {
const { target, prefetch, hot } = args;

const finalOptions = {
options: {},
outputOptions: {},
};

if (hot) {
const { HotModuleReplacementPlugin } = require('webpack');
const hotModuleVal = new HotModuleReplacementPlugin();
if (finalOptions.options && finalOptions.options.plugins) {
finalOptions.options.plugins.unshift(hotModuleVal);
} else {
finalOptions.options.plugins = [hotModuleVal];
}
}
if (prefetch) {
const { PrefetchPlugin } = require('webpack');
const prefetchVal = new PrefetchPlugin(null, args.prefetch);
if (finalOptions.options && finalOptions.options.plugins) {
finalOptions.options.plugins.unshift(prefetchVal);
} else {
finalOptions.options.plugins = [prefetchVal];
}
}
if (target) {
finalOptions.options.target = args.target;
}

return finalOptions;
};

module.exports = resolveAdvanced;
5 changes: 0 additions & 5 deletions packages/webpack-cli/lib/utils/cli-flags.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@ const cli = packageExists('webpack') ? require('webpack').cli : undefined;

const HELP_GROUP = 'help';
const BASIC_GROUP = 'basic';
const ADVANCED_GROUP = 'advanced';

const groups = {
HELP_GROUP,
BASIC_GROUP,
ADVANCED_GROUP,
};

const commands = [
Expand Down Expand Up @@ -129,7 +127,6 @@ const core = [
usage: '--target <value>',
alias: 't',
type: String,
group: ADVANCED_GROUP,
multiple: cli !== undefined,
description: 'Sets the build target e.g. node',
link: 'https://webpack.js.org/configuration/target/#target',
Expand All @@ -149,7 +146,6 @@ const core = [
alias: 'h',
type: Boolean,
negative: true,
group: ADVANCED_GROUP,
description: 'Enables Hot Module Replacement',
link: 'https://webpack.js.org/concepts/hot-module-replacement/',
},
Expand All @@ -167,7 +163,6 @@ const core = [
name: 'prefetch',
usage: '--prefetch <request>',
type: String,
group: ADVANCED_GROUP,
description: 'Prefetch this request',
link: 'https://webpack.js.org/plugins/prefetch-plugin/',
},
Expand Down
10 changes: 3 additions & 7 deletions packages/webpack-cli/lib/webpack-cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const resolveMode = require('./groups/resolveMode');
const resolveStats = require('./groups/resolveStats');
const resolveOutput = require('./groups/resolveOutput');
const basicResolver = require('./groups/basicResolver');
const resolveAdvanced = require('./groups/resolveAdvanced');

class WebpackCLI extends GroupHelper {
constructor() {
Expand Down Expand Up @@ -84,13 +85,8 @@ class WebpackCLI extends GroupHelper {
* @returns {void}
*/
resolveGroups() {
for (const [key, value] of this.groupMap.entries()) {
for (const [key] of this.groupMap.entries()) {
switch (key) {
case groups.ADVANCED_GROUP: {
const AdvancedGroup = require('./groups/AdvancedGroup');
this.advancedGroup = new AdvancedGroup(value);
break;
}
case groups.HELP_GROUP: {
const HelpGroup = require('./groups/HelpGroup');
this.helpGroup = new HelpGroup();
Expand Down Expand Up @@ -200,7 +196,7 @@ class WebpackCLI extends GroupHelper {
.then(() => this._baseResolver(resolveOutput, parsedArgs, outputStrategy))
.then(() => this._handleCoreFlags())
.then(() => this._baseResolver(basicResolver, parsedArgs))
.then(() => this._handleGroupHelper(this.advancedGroup))
.then(() => this._baseResolver(resolveAdvanced, parsedArgs))
.then(() => this._baseResolver(resolveStats, parsedArgs))
.then(() => this._handleGroupHelper(this.helpGroup));
}
Expand Down

0 comments on commit 83a2dd2

Please sign in to comment.