vue-styleguidist
Version:
Vue components style guide generator
48 lines (45 loc) • 1.84 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = mergeWebpackConfig;
var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
var _omit = _interopRequireDefault(require("lodash/omit"));
var _webpackMerge = _interopRequireDefault(require("webpack-merge"));
var IGNORE_SECTIONS = ['entry', 'output', 'watch', 'stats', 'styleguidist'];
var IGNORE_SECTIONS_ENV = {
development: [],
// For production builds, we'll ignore devtool settings to avoid
// source mapping bloat.
production: ['devtool'],
removePlugins: ['plugins']
};
var IGNORE_PLUGINS = ['CommonsChunkPlugins', 'MiniHtmlWebpackPlugin', 'HtmlWebpackPlugin', 'OccurrenceOrderPlugin', 'DedupePlugin', 'UglifyJsPlugin', 'HotModuleReplacementPlugin'];
var merge = (0, _webpackMerge["default"])({
// Ignore user’s plugins to avoid duplicates and issues with our plugins
customizeArray: _webpackMerge["default"].unique('plugins', IGNORE_PLUGINS, function (plugin) {
return plugin.constructor && plugin.constructor.name;
})
});
//make it a typeguard
function isFunc(conf) {
return (0, _isFunction["default"])(conf);
}
/**
* Merge two Webpack configs.
*
* In the user config:
* - Ignores given sections (options.ignore).
* - Ignores plugins that shouldn’t be used twice or may cause issues.
*
* @param {object} baseConfig
* @param {object|Function} userConfig
* @param {string} env
* @return {object}
*/
function mergeWebpackConfig(baseConfig, userConfig, env_) {
var userConfigObject = isFunc(userConfig) ? userConfig(env_) : userConfig;
var safeUserConfig = (0, _omit["default"])(userConfigObject, IGNORE_SECTIONS.concat(IGNORE_SECTIONS_ENV[env_]));
return merge(baseConfig, safeUserConfig);
}