1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- const path = require('path');
- const glob = require('glob');
- /**
- * 动态获取 src 目录下的所有入口文件
- * 使用 glob.sync() 来获取 src 目录下的所有 .js 文件。
- * 遍历这些文件,将文件路径转换为入口名称,去掉 src/ 前缀和 .js 后缀。
- * 将入口名称和对应的文件路径添加到 entries 对象中。
- * */
- const getEntries = () => {
- const entries = {};
- const files = glob.sync('src/**/*.js');
- files.forEach((file) => {
- const entryName = file.replace(/^src\//, '').replace(/\.js$/, '');
- entries[entryName] = `./${file}`;
- });
- return entries;
- };
- module.exports = {
- // 指定打包目标为 Electron 的主进程环境,确保 Webpack 能针对 Electron 主进程的特性进行打包。
- target: 'electron-main',
- // 将 entry 设置为 getEntries() 的返回值,这样 Webpack 会根据动态获取的入口文件进行打包。
- entry: getEntries(),
- output: {
- // path: path.resolve(__dirname, 'dist'),
- path: path.resolve(__dirname, 'outApp/HelloWorld-win32-x64/resources/app/src'),
- // filename: '[name].js' 表示输出的文件名会根据入口名称来生成,这样可以保证按照文件夹分类打包。
- filename: '[name].js',
- // 打包的库的模块类型,根据你写的代码,支持的写法有关,可以根据 ExeMainApp\package.json 的 "type": "commonjs", 配置来
- // libraryTarget: 'umd',
- libraryTarget: 'commonjs2',// 让 Webpack 以 CommonJS 模块格式输出打包后的代码,便于 Node.js 和 Electron 环境使用。
- // libraryTarget: 'commonjs',
- },
- node: {
- // __dirname: false 和 __filename: false 使 Webpack 不改变 Node.js 中 __dirname 和 __filename 的行为,保证在打包后的代码里这些变量可以正常使用。
- __dirname: false,
- __filename: false
- },
- /**
- * 采用自定义函数来处理外部模块。正则表达式 /^[a-z\-0-9]+$/ 用于匹配 Node.js 核心模块和 node_modules 中的第三方模块,
- * 并将它们排除在打包范围之外,以 commonjs 形式引入,避免将这些模块打包进最终文件。
- */
- externals: [
- function ({ context, request }, callback) {
- if (/^[a-z\-0-9]+$/.test(request)) {
- return callback(null, `commonjs ${request}`);
- }
- callback();
- }
- ],
- resolve: {
- extensions: ['.js'],
- modules: [path.resolve(__dirname, 'src'), 'node_modules']
- },
- module: {
- // 使用 babel-loader 配合 @babel/preset-env 对 JavaScript 文件进行转译,确保代码能在目标环境中正常运行。
- rules: [
- {
- test: /\.js$/,
- exclude: /node_modules/,
- use: {
- loader: 'babel-loader',
- options: {
- presets: ['@babel/preset-env']
- }
- }
- }
- ]
- }
- };
|