@packmule/less-pack
Version:
Packmule pack to transpile less files.
100 lines • 3.25 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const mini_css_extract_plugin_1 = __importDefault(require("mini-css-extract-plugin"));
const optimize_css_assets_webpack_plugin_1 = __importDefault(require("optimize-css-assets-webpack-plugin"));
const stylelint_webpack_plugin_1 = __importDefault(require("stylelint-webpack-plugin"));
class LessPack {
constructor() {
this.defaults = {
modules: false,
};
this.configuration = {
resolve: {
extensions: ['.css', '.less'],
},
module: {
rules: [],
},
optimization: {
minimizer: [],
},
plugins: [],
};
this.options = this.defaults;
}
modules() {
this.options.modules = true;
return this;
}
generate(options, hints) {
let loaders = [
{
loader: 'css-loader',
options: {
modules: this.options.modules,
sourceMap: options.debug,
},
},
{
loader: 'postcss-loader',
options: {
sourceMap: options.debug,
},
},
{
loader: 'resolve-url-loader',
options: {
engine: 'postcss',
sourceMap: options.debug,
},
},
{
loader: 'less-loader',
options: {
sourceMap: true,
relativeUrls: false,
},
},
];
if (hints.lint) {
const lint = new stylelint_webpack_plugin_1.default({
context: options.root,
lintDirtyModulesOnly: true,
files: '**/*.{less}',
quiet: !options.debug,
});
this.configuration.plugins.push(lint);
}
if (hints.extract) {
const extraction = new mini_css_extract_plugin_1.default({
filename: hints.hash ? '[name].[contenthash:8].css' : '[name].css',
chunkFilename: hints.hash ? 'chunks/[name].[contenthash:8].css' : 'chunks/[name].css',
});
this.configuration.plugins.push(extraction);
loaders = [mini_css_extract_plugin_1.default.loader, ...loaders];
}
else {
loaders = [
{
loader: 'style-loader',
},
...loaders,
];
}
if (hints.optimize) {
const optimization = new optimize_css_assets_webpack_plugin_1.default();
this.configuration.optimization.minimizer.push(optimization);
}
const rule = {
test: /\.(css|less)$/,
use: loaders,
};
this.configuration.module.rules.push(rule);
return this.configuration;
}
}
exports.default = LessPack;
//# sourceMappingURL=pack.js.map