@luban-cli/cli-lib-service
Version:
A development runtime environment dependency for lib
233 lines • 8.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getWebpackConfig = void 0;
const path_1 = __importDefault(require("path"));
const webpack_1 = __importDefault(require("webpack"));
const webpackbar_1 = __importDefault(require("webpackbar"));
const webpack_merge_1 = __importDefault(require("webpack-merge"));
const terser_webpack_plugin_1 = __importDefault(require("terser-webpack-plugin"));
const mini_css_extract_plugin_1 = __importDefault(require("mini-css-extract-plugin"));
const css_minimizer_webpack_plugin_1 = __importDefault(require("css-minimizer-webpack-plugin"));
const case_sensitive_paths_webpack_plugin_1 = __importDefault(require("case-sensitive-paths-webpack-plugin"));
const webpack_filter_warnings_plugin_1 = __importDefault(require("webpack-filter-warnings-plugin"));
const getBabelConfig_1 = require("./getBabelConfig");
const cleanUpStatsPlugin_1 = require("./cleanUpStatsPlugin");
const share_1 = require("./share");
share_1.injectRequire();
const pkg = share_1.getProjectPackageJson();
const svgRegex = /\.svg(\?v=\d+\.\d+\.\d+)?$/;
const svgOptions = {
limit: 10000,
minetype: "image/svg+xml",
};
const imageOptions = {
limit: 10000,
};
function getWebpackConfig() {
var _a;
const babelConfig = getBabelConfig_1.getBabelConfig(false);
(_a = babelConfig.plugins) === null || _a === void 0 ? void 0 : _a.push([
require.resolve("babel-plugin-import"),
{
style: true,
libraryName: pkg.name,
libraryDirectory: "src",
},
]);
const config = {
devtool: "source-map",
output: {
path: share_1.getProjectPath("./dist/"),
filename: "[name].js",
},
resolve: {
modules: ["node_modules", path_1.default.join(__dirname, "../node_modules")],
extensions: [
".web.tsx",
".web.ts",
".web.jsx",
".web.js",
".ts",
".tsx",
".js",
".jsx",
".json",
],
alias: {
[pkg.name]: process.cwd(),
},
},
node: [
"child_process",
"cluster",
"dgram",
"dns",
"fs",
"module",
"net",
"readline",
"repl",
"tls",
].reduce((acc, name) => (Object.assign(Object.assign({}, acc), { [name]: "empty" })), {}),
module: {
noParse: [/moment.js/],
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: require.resolve("babel-loader"),
options: babelConfig,
},
{
test: /\.tsx?$/,
use: [
{
loader: require.resolve("babel-loader"),
options: babelConfig,
},
{
loader: require.resolve("ts-loader"),
options: {
transpileOnly: true,
},
},
],
},
{
test: /\.css$/,
use: [
mini_css_extract_plugin_1.default.loader,
{
loader: require.resolve("css-loader"),
options: {
sourceMap: true,
},
},
{
loader: require.resolve("postcss-loader"),
options: {
postcssOptions: {
plugins: ["autoprefixer"],
},
sourceMap: true,
},
},
],
},
{
test: /\.less$/,
use: [
mini_css_extract_plugin_1.default.loader,
{
loader: require.resolve("css-loader"),
options: {
sourceMap: true,
},
},
{
loader: require.resolve("postcss-loader"),
options: {
postcssOptions: {
plugins: ["autoprefixer"],
},
sourceMap: true,
},
},
{
loader: require.resolve("less-loader"),
options: {
lessOptions: {
javascriptEnabled: true,
},
sourceMap: true,
},
},
],
},
{
test: svgRegex,
loader: require.resolve("url-loader"),
options: svgOptions,
},
{
test: /\.(png|jpg|jpeg|gif)(\?v=\d+\.\d+\.\d+)?$/i,
loader: require.resolve("url-loader"),
options: imageOptions,
},
],
},
plugins: [
new case_sensitive_paths_webpack_plugin_1.default(),
new webpackbar_1.default({
name: `🚚 ${pkg.name}`,
color: "#2f54eb",
}),
new cleanUpStatsPlugin_1.CleanUpStatsPlugin(),
new webpack_filter_warnings_plugin_1.default({
exclude: /mini-css-extract-plugin[^]*Conflicting order between:/,
}),
],
performance: {
hints: false,
},
};
const entry = ["./components/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",
},
};
if (config.output) {
config.output.library = pkg.name;
config.output.libraryTarget = "umd";
}
config.optimization = {
minimize: true,
minimizer: [new terser_webpack_plugin_1.default()],
};
const uncompressedConfig = webpack_merge_1.default({}, config, {
entry: {
[pkg.name]: entry,
},
mode: "development",
plugins: [
new mini_css_extract_plugin_1.default({
filename: "[name].css",
}),
],
});
const prodConfig = webpack_merge_1.default({}, config, {
entry: {
[`${pkg.name}.min`]: entry,
},
mode: "production",
plugins: [
new webpack_1.default.optimize.ModuleConcatenationPlugin(),
new webpack_1.default.LoaderOptionsPlugin({
minimize: true,
}),
new mini_css_extract_plugin_1.default({
filename: "[name].css",
}),
],
optimization: {
minimize: true,
minimizer: [new css_minimizer_webpack_plugin_1.default({})],
},
});
return [prodConfig, uncompressedConfig];
}
exports.getWebpackConfig = getWebpackConfig;
//# sourceMappingURL=getWebpackConfig.js.map