@luban-cli/cli-plugin-service
Version:
A development runtime environment dependency
131 lines • 5.66 kB
JavaScript
;
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