UNPKG

@luban-cli/cli-plugin-service

Version:
131 lines 5.66 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const mini_css_extract_plugin_1 = __importDefault(require("mini-css-extract-plugin")); const cleanAssetPath_1 = require("../utils/cleanAssetPath"); class Module { apply(args) { const isDevelopment = process.env.NODE_ENV !== "production"; const { api, projectConfig } = args; const { css: { sourceMap, loaderOptions }, } = projectConfig; const cssLoaderOptions = Object.assign({ importLoaders: 1, sourceMap }, ((loaderOptions === null || loaderOptions === void 0 ? void 0 : loaderOptions.css) || {})); const lessLoaderOptions = Object.assign({ sourceMap, javascriptEnabled: true }, ((loaderOptions === null || loaderOptions === void 0 ? void 0 : loaderOptions.less) || {})); const genUrlLoaderOptions = function (dir) { return { limit: projectConfig.assetsLimit, fallback: { loader: "file-loader", options: { publicPath: projectConfig.publicPath, name: cleanAssetPath_1.cleanAssetPath(`${dir}/[name].[hash:8].[ext]`), context: api.getContext(), }, }, }; }; const getMiniCssOptions = (configId) => { return Object.assign(Object.assign({}, ((loaderOptions === null || loaderOptions === void 0 ? void 0 : loaderOptions.miniCss) || {})), { emit: configId === "client" }); }; api.chainWebpack("server", (webpackConfig) => { webpackConfig.module .rule("ts") .test(/\.ts[x]?$/) .exclude.add(/node_modules/) .end() .use("babel-loader") .loader("babel-loader") .options({ cacheDirectory: true, presets: ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"], plugins: [isDevelopment && require.resolve("react-refresh/babel")].filter(Boolean), }) .end(); }); api.chainWebpack("client", (webpackConfig) => { webpackConfig.module .rule("ts") .test(/\.ts[x]?$/) .exclude.add(/node_modules/) .end() .use("babel-loader") .loader("babel-loader") .options({ cacheDirectory: true, configFile: api.resolve("babel.config.js") }) .end(); }); api.chainAllWebpack((webpackConfig, id) => { webpackConfig.module .rule("images") .test(/\.(png|jpe?g|gif|webp|svg)(\?.*)?$/) .use("url-loader") .loader("url-loader") .options(genUrlLoaderOptions(projectConfig.assetsDir.images)); webpackConfig.module .rule("media") .test(/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/) .use("url-loader") .loader("url-loader") .options(genUrlLoaderOptions(projectConfig.assetsDir.media)); webpackConfig.module .rule("fonts") .test(/\.(woff2?|eot|ttf|otf)(\?.*)?$/i) .use("url-loader") .loader("url-loader") .options(genUrlLoaderOptions(projectConfig.assetsDir.fonts)); webpackConfig.module .rule("ejs") .test(/\.ejs$/) .use("ejs-compiled-loader") .loader("ejs-compiled-loader") .options({ htmlmin: true, htmlminOptions: { removeComments: true, }, }) .end(); webpackConfig.module .rule("css") .test(/\.css$/) .use("extract-css") .loader(mini_css_extract_plugin_1.default.loader) .options(getMiniCssOptions(id)) .end() .use("css-loader") .loader("css-loader") .options(cssLoaderOptions) .end() .use("postcss") .loader("postcss-loader") .options({ sourceMap, config: { path: `${api.getContext()}/postcss.config.js` } }) .end(); webpackConfig.module .rule("less") .test(/\.less$/) .use("extract-css") .loader(mini_css_extract_plugin_1.default.loader) .options(getMiniCssOptions(id)) .end() .use("css-loader") .loader("css-loader") .options(Object.assign({ modules: { mode: "global", exportGlobals: true, localIdentName: "[name]_[local]_[hash:base64:5]", context: api.getContext(), } }, cssLoaderOptions)) .end() .use("postcss-loader") .loader("postcss-loader") .options({ sourceMap, config: { path: `${api.getContext()}/postcss.config.js` } }) .end() .use("less-loader") .loader("less-loader") .options(lessLoaderOptions) .end(); }); } } exports.default = Module; //# sourceMappingURL=module.js.map