@kkt/less-modules
Version:
Support for regular less files and *.module.less files.
83 lines (82 loc) β’ 3.62 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const getCSSModuleLocalIdent_1 = __importDefault(require("react-dev-utils/getCSSModuleLocalIdent"));
const kkt_1 = require("kkt");
const lessRegex = /\.(less)$/;
const lessModuleRegex = /\.module\.(less)$/;
const createLessModule = (lessLoaderOptions = {}) => {
return function (conf, evn, options = {}) {
if (!conf) {
throw Error('KKT:@kkt/less-modules: there is no config found');
}
options.isEnvProduction = evn === 'production';
options.isEnvDevelopment = evn === 'development';
const loaders = [];
loaders.push({
test: lessRegex,
exclude: lessModuleRegex,
use: (0, kkt_1.getStyleLoaders)({
importLoaders: 3,
sourceMap: options.isEnvProduction ? options.shouldUseSourceMap : options.isEnvDevelopment,
modules: {
mode: 'icss',
},
}, {
...options,
isEnvProduction: options.isEnvProduction,
isEnvDevelopment: options.isEnvDevelopment,
shouldUseSourceMap: options.shouldUseSourceMap,
miniCssExtractPluginLoader: kkt_1.MiniCssExtractPlugin.loader,
preProcessorOptions: {
implementation: require.resolve('less'),
...lessLoaderOptions,
},
}, require.resolve('less-loader')),
// Don't consider CSS imports dead code even if the
// containing package claims to have no side effects.
// Remove this when webpack adds a warning or an error for this.
// See https://github.com/webpack/webpack/issues/6571
sideEffects: true,
});
loaders.push({
test: lessModuleRegex,
use: (0, kkt_1.getStyleLoaders)({
importLoaders: 3,
sourceMap: options.isEnvProduction ? options.shouldUseSourceMap : options.isEnvDevelopment,
modules: {
mode: 'local',
// @ts-ignore
//π₯π₯π¨πΈπ«βοΈπ Upgrade `@types/react-dev-utils`
getLocalIdent: getCSSModuleLocalIdent_1.default,
},
}, {
...options,
isEnvProduction: options.isEnvProduction,
isEnvDevelopment: options.isEnvDevelopment,
shouldUseSourceMap: options.shouldUseSourceMap,
miniCssExtractPluginLoader: kkt_1.MiniCssExtractPlugin.loader,
preProcessorOptions: {
implementation: require.resolve('less'),
...lessLoaderOptions,
},
}, require.resolve('less-loader')),
});
// Exclude all less files (including module files) from file-loader
conf.module.rules = conf.module?.rules?.map((rule) => {
if (rule && typeof rule === 'object' && rule.oneOf) {
loaders.forEach((item) => rule.oneOf?.splice(rule.oneOf.length - 1, 0, item));
}
return rule;
});
return conf;
};
};
/**
* Use create-react-app to build react libraries. Support for regular less files and *.module.less files.
*/
const lessmodule = createLessModule();
lessmodule.withLoaderOptions = createLessModule;
exports.default = lessmodule;