UNPKG

@sanpjs/bundler-webpack

Version:

@sanpjs/bundler-webpack

110 lines 4.9 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const path_1 = require("path"); // import nodeExternals from 'webpack-node-externals'; // import fse from 'fs-extra'; const lodash_compact_1 = __importDefault(require("lodash.compact")); const webpackbar_1 = __importDefault(require("webpackbar")); // import MiniCssExtractPlugin from 'mini-css-extract-plugin'; // import HotModuleReplacementPlugin from 'webpack/lib/HotModuleReplacementPlugin'; const NoEmitOnErrorsPlugin_1 = __importDefault(require("webpack/lib/NoEmitOnErrorsPlugin")); const plugin_1 = __importDefault(require("san-loader/lib/plugin")); const case_sensitive_paths_webpack_plugin_1 = __importDefault(require("case-sensitive-paths-webpack-plugin")); const DefinePlugin_1 = __importDefault(require("webpack/lib/DefinePlugin")); const html_webpack_harddisk_plugin_1 = __importDefault(require("html-webpack-harddisk-plugin")); const utils_1 = require("../utils"); const rules = __importStar(require("../rules")); exports.default = (context, args) => { const { mode, root, pages, server } = context.config; const { publicPath, outDir } = context.config.build; const { resolve } = context.resolver; // const cssFilename = getAssetPath(assetDir, `css/[name]${hash ? '.[contenthash:8]' : ''}.css`); const modules = ['node_modules', (0, path_1.join)(root, 'node_modules'), (0, path_1.join)(__dirname, 'node_modules')]; const webpackConfigRules = Object.values(rules).map(rule => rule(context)); // TODO: 待评估,SSR 下去掉 pollyfill,提升性能 webpackConfigRules.forEach(rule => { if (Array.isArray(rule.use)) { rule.use.forEach((loaderConfig) => { if (loaderConfig.loader && loaderConfig.loader.endsWith('babel-loader')) { loaderConfig.options = {}; } }); } }); const webpackConfig = { target: 'node', // TODO: node-modules 不能被 webpack 打包 // externals: [nodeExternals()], mode, context: root, entry: pages.reduce((webpackEntry, entry) => { webpackEntry[entry.name] = (0, path_1.resolve)(root, 'pages', entry.name); return webpackEntry; }, {}), output: { path: (0, path_1.join)(root, outDir), filename: 'server.[name].js', publicPath, libraryTarget: 'commonjs2', pathinfo: false }, // node: { // console: true, // __dirname: true // }, module: { rules: Object.values(rules).map(rule => rule(context)) }, resolve: { // 不需要那么多 extensions: ['.js', '.ts', '.d.ts', '.san'], symlinks: false, mainFields: ['browser', 'module', 'main'], alias: { // warn 这里还可以扩充alias:components 这类 '@': root, 'regenerator-runtime': (0, path_1.dirname)(resolve('regenerator-runtime')), 'core-js': (0, path_1.dirname)(resolve('core-js')) }, modules }, resolveLoader: { modules }, plugins: [ new plugin_1.default(), new DefinePlugin_1.default((0, utils_1.defineVar)(mode)), new webpackbar_1.default({ name: args._[0] }), new case_sensitive_paths_webpack_plugin_1.default(), server?.devMiddleware?.writeToDisk && new html_webpack_harddisk_plugin_1.default(), // context.dev && new HotModuleReplacementPlugin(), context.dev && new NoEmitOnErrorsPlugin_1.default() ], optimization: {} }; webpackConfig.plugins = (0, lodash_compact_1.default)(webpackConfig.plugins); return webpackConfig; }; //# sourceMappingURL=server.js.map