@packmule/less-pack
Version:
Packmule pack to transpile less files.
100 lines • 2.85 kB
JavaScript
import ExtractPlugin from 'mini-css-extract-plugin';
import LintPlugin from 'stylelint-webpack-plugin';
export default 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: {
esModule: true,
modules: this.options.modules,
sourceMap: hints.map,
},
},
{
loader: 'postcss-loader',
options: {
sourceMap: hints.map,
},
},
{
loader: 'resolve-url-loader',
options: {
sourceMap: hints.map,
},
},
{
loader: 'less-loader',
options: {
sourceMap: true,
},
},
];
if (hints.lint) {
const lint = new LintPlugin({
context: options.root,
lintDirtyModulesOnly: true,
files: ['**/*.{css,less}'],
fix: hints.fix,
quiet: !options.debug,
});
this.configuration.plugins.push(lint);
}
if (hints.extract) {
const extraction = new ExtractPlugin({
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 = [
{
loader: ExtractPlugin.loader,
options: {
esModule: true,
},
},
...loaders,
];
}
else {
loaders = [
{
loader: 'style-loader',
options: {
esModule: true,
},
},
...loaders,
];
}
const rule = {
test: /\.(css|less)$/,
use: loaders,
};
this.configuration.module.rules.push(rule);
return this.configuration;
}
}
//# sourceMappingURL=pack.js.map