webpack-config-vacuumlabs
Version:
Default Webpack 2 & 3 config we use in vacuumlabs.
81 lines (65 loc) • 2.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.loaders = loaders;
exports.plugins = plugins;
var _autoprefixer = _interopRequireDefault(require("autoprefixer"));
var _extractTextWebpackPlugin = _interopRequireDefault(require("extract-text-webpack-plugin"));
var _lodash = _interopRequireDefault(require("lodash"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
var _loaders = {
css: null,
scss: 'sass-loader',
sass: 'sass-loader?indentedSyntax'
};
var cssModulesConfig = '?modules&camelCase=dashes&localIdentName=[path][name]---[local]---[hash:base64:8]';
var postcssLoader = {
loader: 'postcss-loader',
options: {
plugins: function plugins() {
return [(0, _autoprefixer["default"])({
browsers: 'last 2 version'
})];
}
}
};
var cssLoader = function cssLoader(modules) {
return "css-loader".concat(modules ? cssModulesConfig : '');
};
var use = function use(modules, ext) {
return _lodash["default"].compact([cssLoader(modules), postcssLoader, _loaders[ext]]);
};
function rule(transform, ext) {
return {
test: new RegExp("\\.".concat(ext, "$")),
oneOf: [{
resourceQuery: /module/,
use: transform(use(true, ext))
}, {
use: transform(use(false, ext))
}]
};
}
function loaders(options) {
var transform = options.useDevServer ? function (l) {
return ['style-loader'].concat(_toConsumableArray(l));
} : function (l) {
return _extractTextWebpackPlugin["default"].extract({
fallback: 'style-loader',
use: l
});
};
return _lodash["default"].keys(_loaders).map(_lodash["default"].partial(rule, transform));
} // Render styles into separate cacheable file to prevent FOUC and
// optimize for critical rendering path.
function plugins(options) {
return options.useDevServer ? [] : [new _extractTextWebpackPlugin["default"]({
filename: options.useHashedAssetNames ? 'app.[contenthash].css' : 'app.css',
allChunks: true
})];
}