UNPKG

@luban-cli/cli-lib-service

Version:
233 lines 8.12 kB
"use strict"; 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