@sanpjs/bundler-webpack
Version:
@sanpjs/bundler-webpack
110 lines • 4.9 kB
JavaScript
;
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