@ant-design/tools
Version:
tools for ant design
190 lines (188 loc) • 6.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _projectHelper = require("./utils/projectHelper");
var path = _interopRequireWildcard(require("path"));
var webpack = _interopRequireWildcard(require("webpack"));
var _webpackbar = _interopRequireDefault(require("webpackbar"));
var _webpackMerge = _interopRequireDefault(require("webpack-merge"));
var _miniCssExtractPlugin = _interopRequireDefault(require("mini-css-extract-plugin"));
var _cssMinimizerWebpackPlugin = _interopRequireDefault(require("css-minimizer-webpack-plugin"));
var _caseSensitivePathsWebpackPlugin = _interopRequireDefault(require("case-sensitive-paths-webpack-plugin"));
var _terserWebpackPlugin = _interopRequireDefault(require("terser-webpack-plugin"));
var _CleanUpStatsPlugin = _interopRequireDefault(require("./utils/CleanUpStatsPlugin"));
var _fsExtra = require("fs-extra");
var _getBabelCommonConfig = _interopRequireDefault(require("./getBabelCommonConfig"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
const svgRegex = /\.svg(\?v=\d+\.\d+\.\d+)?$/;
const svgOptions = {
limit: 10000,
minetype: 'image/svg+xml'
};
const imageOptions = {
limit: 10000
};
const getWebpackConfig = (modules, options = {}) => {
const {
enabledReactCompiler
} = options;
const pkg = (0, _fsExtra.readJsonSync)((0, _projectHelper.getProjectPath)('package.json'));
const babelConfig = (0, _getBabelCommonConfig.default)(modules || false, {
enabledReactCompiler: enabledReactCompiler
});
babelConfig.plugins.push([(0, _projectHelper.resolve)('babel-plugin-import'), {
style: true,
libraryName: pkg.name,
libraryDirectory: 'components'
}]);
if (pkg.name !== 'antd') {
babelConfig.plugins.push([(0, _projectHelper.resolve)('babel-plugin-import'), {
style: 'css',
libraryDirectory: 'es',
libraryName: 'antd'
}, 'other-package-babel-plugin-import']);
}
if (modules === false) {
babelConfig.plugins.push(require.resolve("./replaceLib"));
}
const config = {
devtool: 'source-map',
output: {
path: (0, _projectHelper.getProjectPath)('./dist/'),
filename: '[name].js'
},
resolve: {
modules: ['node_modules', path.join(__dirname, '../node_modules')],
extensions: ['.web.tsx', '.web.ts', '.web.jsx', '.web.js', '.ts', '.tsx', '.js', '.jsx', '.json'],
alias: {
[pkg.name]: process.cwd()
},
fallback: ['child_process', 'cluster', 'dgram', 'dns', 'fs', 'module', 'net', 'readline', 'repl', 'tls'].reduce((acc, name) => ({
...acc,
[name]: false
}), {})
},
module: {
noParse: [/moment.js/],
rules: [{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: (0, _projectHelper.resolve)('babel-loader'),
options: babelConfig
}, {
test: /\.tsx?$/,
use: [{
loader: (0, _projectHelper.resolve)('babel-loader'),
options: babelConfig
}, {
loader: (0, _projectHelper.resolve)('ts-loader'),
options: {
transpileOnly: true
}
}]
}, {
test: /\.css$/,
use: [_miniCssExtractPlugin.default.loader, {
loader: (0, _projectHelper.resolve)('css-loader'),
options: {
sourceMap: true
}
}, {
loader: (0, _projectHelper.resolve)('postcss-loader'),
options: {
postcssOptions: {
plugins: ['autoprefixer']
},
sourceMap: true
}
}]
}, {
test: svgRegex,
loader: (0, _projectHelper.resolve)('url-loader'),
options: svgOptions
}, {
test: /\.(png|jpg|jpeg|gif)(\?v=\d+\.\d+\.\d+)?$/i,
loader: (0, _projectHelper.resolve)('url-loader'),
options: imageOptions
}]
},
ignoreWarnings: [{
message: /mini-css-extract-plugin[^]*Conflicting order between:/
}],
plugins: [new _caseSensitivePathsWebpackPlugin.default(), new webpack.BannerPlugin(`
${pkg.name} v${pkg.version}
Copyright 2015-present, Alipay, Inc.
All rights reserved.
`), new _webpackbar.default({
name: '🚚 Ant Design Tools',
color: '#2f54eb'
}), new _CleanUpStatsPlugin.default()],
performance: {
hints: false
}
};
if (process.env.RUN_ENV === 'PRODUCTION') {
const entry = ['./index'];
config.externals = {
react: {
root: 'React',
commonjs2: 'react',
commonjs: 'react',
amd: 'react'
},
'react-dom': {
root: 'ReactDOM',
commonjs2: 'react-dom',
commonjs: 'react-dom',
amd: 'react-dom'
}
};
config.output.library = pkg.name;
config.output.libraryTarget = 'umd';
config.output.globalObject = 'this';
config.optimization = {
minimizer: [new _terserWebpackPlugin.default({
parallel: true,
minify: _terserWebpackPlugin.default.uglifyJsMinify,
terserOptions: {
warnings: false
}
})]
};
const uncompressedConfig = (0, _webpackMerge.default)({}, config, {
entry: {
[pkg.name]: entry
},
mode: 'development',
plugins: [new webpack.optimize.ModuleConcatenationPlugin(), new _miniCssExtractPlugin.default({
filename: '[name].css'
})]
});
const prodConfig = (0, _webpackMerge.default)({}, config, {
entry: {
[`${pkg.name}.min`]: entry
},
mode: 'production',
plugins: [new webpack.LoaderOptionsPlugin({
minimize: true
}), new _miniCssExtractPlugin.default({
filename: '[name].css'
})],
optimization: {
minimize: true,
minimizer: [new _cssMinimizerWebpackPlugin.default({})]
}
});
return [prodConfig, uncompressedConfig];
}
return [config];
};
getWebpackConfig.webpack = webpack;
getWebpackConfig.svgRegex = svgRegex;
getWebpackConfig.svgOptions = svgOptions;
getWebpackConfig.imageOptions = imageOptions;
var _default = exports.default = getWebpackConfig;