104 lines
2.6 KiB
JavaScript
104 lines
2.6 KiB
JavaScript
const path = require('path');
|
|
const fs = require('fs');
|
|
const babel = require('@babel/core');
|
|
|
|
function getImportedAntCptNamesByDirPath(dirPath) {
|
|
function union(a, b) {
|
|
return Array.from(new Set([...a, ...b]));
|
|
}
|
|
|
|
function kebabCase(str) {
|
|
return str.replace(/([a-z])([A-Z])/g, '$1-$2').replace(/\s+/g, '-').toLowerCase();
|
|
}
|
|
|
|
function getImportedAntCptNamesByFilePath(filePath) {
|
|
const fileContent = fs.readFileSync(filePath, {
|
|
encoding: 'utf8',
|
|
});
|
|
const importedAntCptNames = [];
|
|
|
|
babel.transformSync(fileContent, {
|
|
sourceType: 'module',
|
|
presets: [
|
|
require.resolve('@babel/preset-react'),
|
|
],
|
|
plugins: [
|
|
'@babel/plugin-proposal-class-properties',
|
|
{
|
|
visitor: {
|
|
ImportDeclaration(path) {
|
|
const { node } = path;
|
|
if (!node) return;
|
|
const { value } = node.source;
|
|
node.specifiers.forEach((spec) => {
|
|
if (value === 'antd') {
|
|
importedAntCptNames.push(spec.local.name);
|
|
}
|
|
});
|
|
},
|
|
},
|
|
},
|
|
],
|
|
});
|
|
return importedAntCptNames;
|
|
}
|
|
|
|
function getFilesPathByDirPath(dirPath) {
|
|
const filesPath = [];
|
|
function make(dirPath) {
|
|
const files = fs.readdirSync(dirPath, {
|
|
withFileTypes: true,
|
|
});
|
|
files.forEach((fileDirent) => {
|
|
if (fileDirent.isFile() && /\.(js|jsx)$/.test(fileDirent.name)) {
|
|
const filePath = path.join(dirPath, fileDirent.name);
|
|
filesPath.push(filePath);
|
|
}
|
|
if (fileDirent.isDirectory()) {
|
|
make(path.join(dirPath, fileDirent.name));
|
|
}
|
|
});
|
|
}
|
|
make(dirPath);
|
|
return filesPath;
|
|
}
|
|
|
|
const filesPath = getFilesPathByDirPath(dirPath);
|
|
let importedAntCptNames = [];
|
|
|
|
filesPath.forEach((filePath) => {
|
|
const cptNames = getImportedAntCptNamesByFilePath(filePath);
|
|
importedAntCptNames = union(importedAntCptNames, cptNames);
|
|
});
|
|
importedAntCptNames = importedAntCptNames.map((item) => {
|
|
return `antd/lib/${kebabCase(item)}`;
|
|
});
|
|
|
|
return importedAntCptNames;
|
|
}
|
|
|
|
const importedAntCptNames = getImportedAntCptNamesByDirPath('./src/');
|
|
|
|
module.exports = function getWebpackConfig(webpackConfig) {
|
|
webpackConfig.entry = {
|
|
lib: [
|
|
'react',
|
|
'react-dom',
|
|
'@hot-loader/react-dom',
|
|
'react-router-dom',
|
|
'react-sortable-hoc',
|
|
'react-dnd',
|
|
'react-dnd-html5-backend',
|
|
'd3',
|
|
'jquery',
|
|
'lodash',
|
|
'moment',
|
|
'xlsx',
|
|
'highlight.js',
|
|
'react-highlight',
|
|
...importedAntCptNames,
|
|
],
|
|
};
|
|
return webpackConfig;
|
|
};
|