@wjunt/webpack-config
Version:
Presets of webpack config
80 lines (79 loc) • 2.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const webpackMerge = require("webpack-merge");
const node_logger_1 = require("@wjunt/node-logger");
const lodash_1 = require("lodash");
const path = require("path");
const util_1 = require("util");
const __1 = require("..");
const externals_1 = require("../config/externals");
function isDevelopment() {
return typeof process.env.NODE_ENV === 'undefined' ? false : /^develop(ment)?$/.test(process.env.NODE_ENV);
}
exports.isDevelopment = isDevelopment;
/**
* Smartly merge webpack configuration. Basic configuration is merged by default.
* @param configs
* @example
* // Support TypeScript and CSS.
* module.exports = merge({
* css(),
* ts(),
* { ...others },
* });
*/
function merge(...configs) {
let config = webpackMerge.smart(__1.base(), ...configs);
config.externals = externals_1.mergeExternals(externals_1.getExternals(config.output.libraryTarget), ...configs.map((config) => config.externals));
config.plugins = lodash_1.uniqBy(config.plugins, (plugin) => plugin.constructor && plugin.constructor.name);
node_logger_1.default.getLogger('fwc').debug(`Merged webpack configuration:
${util_1.inspect(config, { depth: null, colors: true })}`);
return config;
}
exports.merge = merge;
function checkDependency(name) {
try {
if (require.resolve(name)) {
return;
}
}
catch (_) {
}
try {
if (require.resolve(name, { paths: [path.resolve('node_modules')] })) {
return;
}
}
catch (_) {
}
throw new Error(`Required dependency "${name}" is not installed`);
}
exports.checkDependency = checkDependency;
/**
* Return paths to help webpack resolve modules or loaders.
* @param request - Start point to find paths.
* @private
*/
function getResolveModules(request) {
let modules = [
'node_modules',
];
if (typeof require.resolve.paths === 'undefined') {
node_logger_1.default.getLogger('fwc').warn('Please upgrade `@wjunt/fd-cli` to avoid potential issues');
return modules.concat(path.join(request, 'node_modules'));
}
const paths = require.resolve.paths(request);
if (paths) {
modules = modules.concat(paths);
}
return modules;
}
exports.getResolveModules = getResolveModules;
/**
* This function doesn't really "do anything" at runtime, it's just the identity function for typing.
* @param config
*/
function createWebpackConfiguration(config) {
return config;
}
exports.createWebpackConfiguration = createWebpackConfiguration;