You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.1 KiB
73 lines
2.1 KiB
#!/usr/bin/env node
|
|
/**
|
|
* 这个方法用来处理 css-modlue
|
|
* 由于没有开源插件,所以自己撸了一个
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const getLocalIdentName = require('./getLocalIdentName');
|
|
const AddlocalIdentName = require('./AddlocalIdentName');
|
|
const replacedefaultLess = require('./replacedefaultLess');
|
|
// read less file list
|
|
const lessArray = ['@import "../node_modules/antd/lib/style/themes/default.less";'];
|
|
|
|
const loopAllLess = parents => {
|
|
const paths = fs.readdirSync(parents);
|
|
const promiseList = [];
|
|
paths.forEach(itemPath => {
|
|
if (itemPath === 'style' || itemPath === 'demo') {
|
|
return;
|
|
}
|
|
// file status
|
|
const fileStatus = fs.lstatSync(path.join(parents, itemPath));
|
|
// is file
|
|
// is Directory
|
|
if (fileStatus.isDirectory()) {
|
|
return loopAllLess(path.join(parents, itemPath));
|
|
}
|
|
// is less file
|
|
if (itemPath.indexOf('.less') > -1) {
|
|
const relaPath = path.join(parents, itemPath);
|
|
// post css add localIdentNameplugin
|
|
const fileContent = replacedefaultLess(relaPath);
|
|
// push less file
|
|
promiseList.push(
|
|
AddlocalIdentName(relaPath, fileContent, getLocalIdentName(relaPath)).then(result => {
|
|
lessArray.push(result);
|
|
})
|
|
);
|
|
}
|
|
});
|
|
return Promise.all(promiseList);
|
|
};
|
|
|
|
class mergeLessPlugin {
|
|
constructor(options) {
|
|
const defaulOptions = {
|
|
stylesDir: path.join(__dirname, './src/'),
|
|
outFile: path.join(__dirname, './tmp/ant.design.pro.less'),
|
|
};
|
|
this.options = Object.assign(defaulOptions, options);
|
|
this.generated = false;
|
|
}
|
|
|
|
apply(compiler) {
|
|
const { options } = this;
|
|
compiler.plugin('emit', (compilation, callback) => {
|
|
const { outFile } = options;
|
|
// covert less
|
|
if (fs.existsSync(outFile)) {
|
|
fs.unlinkSync(outFile);
|
|
} else {
|
|
fs.mkdir(path.dirname(outFile));
|
|
}
|
|
loopAllLess(options.stylesDir).then(() => {
|
|
fs.writeFileSync(outFile, lessArray.join('\n'));
|
|
callback();
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = mergeLessPlugin;
|
|
|