Skip to content

Commit

Permalink
refactor: remove deps on webpack
Browse files Browse the repository at this point in the history
Try to use only the public webpack API
  • Loading branch information
sokra committed Dec 29, 2017
1 parent 896cd57 commit cf82edb
Show file tree
Hide file tree
Showing 8 changed files with 59 additions and 23 deletions.
30 changes: 30 additions & 0 deletions bin/ErrorHelpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict";

const webpackOptionsFlag = "WEBPACK_OPTIONS";

exports.cutOffByFlag = (stack, flag) => {
stack = stack.split("\n");
for (let i = 0; i < stack.length; i++)
if (stack[i].indexOf(flag) >= 0)
stack.length = i;
return stack.join("\n");
};

exports.cutOffWebpackOptions = (stack) => exports.cutOffByFlag(stack, webpackOptionsFlag);

exports.cutOffMultilineMessage = (stack, message) => {
stack = stack.split("\n");
message = message.split("\n");

return stack.reduce((acc, line, idx) => line === message[idx] || line === `Error: ${message[idx]}` ? acc : acc.concat(line), []).join("\n");
};

exports.cleanUpWebpackOptions = (stack, message) => {
stack = exports.cutOffWebpackOptions(stack);
stack = exports.cutOffMultilineMessage(stack, message);
return stack;
};
16 changes: 8 additions & 8 deletions bin/convert-argv.js
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ module.exports = function(yargs, argv, convertOptions) {
defineObject = {};
},
function() {
var DefinePlugin = require("webpack/lib/DefinePlugin");
var DefinePlugin = require("webpack").DefinePlugin;
addPlugin(options, new DefinePlugin(defineObject));
}
);
Expand Down Expand Up @@ -462,12 +462,12 @@ module.exports = function(yargs, argv, convertOptions) {
mapArgToBoolean("cache");

ifBooleanArg("hot", function() {
var HotModuleReplacementPlugin = require("webpack/lib/HotModuleReplacementPlugin");
var HotModuleReplacementPlugin = require("webpack").HotModuleReplacementPlugin;
addPlugin(options, new HotModuleReplacementPlugin());
});

ifBooleanArg("debug", function() {
var LoaderOptionsPlugin = require("webpack/lib/LoaderOptionsPlugin");
var LoaderOptionsPlugin = require("webpack").LoaderOptionsPlugin;
addPlugin(
options,
new LoaderOptionsPlugin({
Expand Down Expand Up @@ -503,7 +503,7 @@ module.exports = function(yargs, argv, convertOptions) {
});

ifArg("optimize-max-chunks", function(value) {
var LimitChunkCountPlugin = require("webpack/lib/optimize/LimitChunkCountPlugin");
var LimitChunkCountPlugin = require("webpack").optimize.LimitChunkCountPlugin;
addPlugin(
options,
new LimitChunkCountPlugin({
Expand All @@ -513,7 +513,7 @@ module.exports = function(yargs, argv, convertOptions) {
});

ifArg("optimize-min-chunk-size", function(value) {
var MinChunkSizePlugin = require("webpack/lib/optimize/MinChunkSizePlugin");
var MinChunkSizePlugin = require("webpack").optimize.MinChunkSizePlugin;
addPlugin(
options,
new MinChunkSizePlugin({
Expand All @@ -523,7 +523,7 @@ module.exports = function(yargs, argv, convertOptions) {
});

ifBooleanArg("optimize-minimize", function() {
var LoaderOptionsPlugin = require("webpack/lib/LoaderOptionsPlugin");
var LoaderOptionsPlugin = require("webpack").LoaderOptionsPlugin;
addPlugin(
options,
new LoaderOptionsPlugin({
Expand All @@ -533,7 +533,7 @@ module.exports = function(yargs, argv, convertOptions) {
});

ifArg("prefetch", function(request) {
var PrefetchPlugin = require("webpack/lib/PrefetchPlugin");
var PrefetchPlugin = require("webpack").PrefetchPlugin;
addPlugin(options, new PrefetchPlugin(request));
});

Expand All @@ -546,7 +546,7 @@ module.exports = function(yargs, argv, convertOptions) {
} else {
name = value;
}
var ProvidePlugin = require("webpack/lib/ProvidePlugin");
var ProvidePlugin = require("webpack").ProvidePlugin;
addPlugin(options, new ProvidePlugin(name, value));
});

Expand Down
8 changes: 4 additions & 4 deletions bin/process-options.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ module.exports = function processOptions(yargs, argv) {
var firstOptions = Array.isArray(options) ? options[0] || {} : options;

if (typeof options.stats === "boolean" || typeof options.stats === "string") {
var statsPresetToOptions = require("webpack/lib/Stats.js").presetToOptions;
var statsPresetToOptions = require("webpack").Stats.presetToOptions;
options.stats = statsPresetToOptions(options.stats);
}

Expand Down Expand Up @@ -127,15 +127,15 @@ module.exports = function processOptions(yargs, argv) {
}
});

var webpack = require("webpack/lib/webpack.js");
var webpack = require("webpack");

Error.stackTraceLimit = 30;
var lastHash = null;
var compiler;
try {
compiler = webpack(options);
} catch (e) {
var WebpackOptionsValidationError = require("webpack/lib/WebpackOptionsValidationError");
var WebpackOptionsValidationError = require("webpack").WebpackOptionsValidationError;
if (e instanceof WebpackOptionsValidationError) {
if (argv.color)
console.error(
Expand All @@ -148,7 +148,7 @@ module.exports = function processOptions(yargs, argv) {
}

if (argv.progress) {
var ProgressPlugin = require("webpack/lib/ProgressPlugin");
var ProgressPlugin = require("webpack").ProgressPlugin;
compiler.apply(
new ProgressPlugin({
profile: argv.profile
Expand Down
8 changes: 4 additions & 4 deletions bin/webpack.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ require("v8-compile-cache");
var resolveCwd = require("resolve-cwd");
// Local version replace global one
var localCLI = resolveCwd.silent("webpack-cli/bin/webpack");
var ErrorHelpers = require("webpack/lib/ErrorHelpers");
var ErrorHelpers = require("./ErrorHelpers");
const NON_COMPILATION_ARGS = [
"init",
"migrate",
Expand Down Expand Up @@ -247,7 +247,7 @@ yargs.parse(process.argv.slice(2), (err, argv, output) => {
}

var firstOptions = [].concat(options)[0];
var statsPresetToOptions = require("webpack/lib/Stats.js").presetToOptions;
var statsPresetToOptions = require("webpack").Stats.presetToOptions;

var outputOptions = options.stats;
if (
Expand Down Expand Up @@ -378,7 +378,7 @@ yargs.parse(process.argv.slice(2), (err, argv, output) => {
}
});

var webpack = require("webpack/lib/webpack.js");
var webpack = require("webpack");

var lastHash = null;
var compiler;
Expand All @@ -399,7 +399,7 @@ yargs.parse(process.argv.slice(2), (err, argv, output) => {
}

if (argv.progress) {
var ProgressPlugin = require("webpack/lib/ProgressPlugin");
var ProgressPlugin = require("webpack").ProgressPlugin;
compiler.apply(
new ProgressPlugin({
profile: argv.profile
Expand Down
8 changes: 3 additions & 5 deletions lib/commands/migrate.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ const inquirer = require("inquirer");
const PLazy = require("p-lazy");
const Listr = require("listr");

const validateSchema = require("webpack/lib/validateSchema");
const WebpackOptionsValidationError = require("webpack/lib/WebpackOptionsValidationError");
const webpackOptionsSchema = require("webpack/schemas/webpackOptionsSchema.json");
const validate = require("webpack").validate;
const WebpackOptionsValidationError = require("webpack").WebpackOptionsValidationError;

const runPrettier = require("../utils/run-prettier");

Expand Down Expand Up @@ -119,8 +118,7 @@ module.exports = function migrate(
});

if (answer["confirmValidation"]) {
const webpackOptionsValidationErrors = validateSchema(
webpackOptionsSchema,
const webpackOptionsValidationErrors = validate(
require(outputConfigPath)
);
if (webpackOptionsValidationErrors.length) {
Expand Down
2 changes: 1 addition & 1 deletion test/BinTestCases.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ function spawn(args, options) {
"--dir",
path.resolve("coverage"),
"--",
require.resolve("webpack/test/helpers/exec-in-directory.js"),
require.resolve("./helpers/exec-in-directory.js"),
options.cwd
].concat(args);
options = Object.assign({}, options, {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var DefinePlugin = require("webpack/lib/DefinePlugin");
var DefinePlugin = require("webpack").DefinePlugin;
var path = require("path");

module.exports = {
Expand Down
8 changes: 8 additions & 0 deletions test/helpers/exec-in-directory.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
"use strict";

const dir = process.argv[2];
const bin = process.argv[3];
process.argv.splice(1, 2);
process.chdir(dir);

require(bin);

0 comments on commit cf82edb

Please sign in to comment.