webpack.main.config.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. const path = require('path');
  2. const glob = require('glob');
  3. /**
  4. * 动态获取 src 目录下的所有入口文件
  5. * 使用 glob.sync() 来获取 src 目录下的所有 .js 文件。
  6. * 遍历这些文件,将文件路径转换为入口名称,去掉 src/ 前缀和 .js 后缀。
  7. * 将入口名称和对应的文件路径添加到 entries 对象中。
  8. * */
  9. const getEntries = () => {
  10. const entries = {};
  11. const files = glob.sync('src/**/*.js');
  12. files.forEach((file) => {
  13. const entryName = file.replace(/^src\//, '').replace(/\.js$/, '');
  14. entries[entryName] = `./${file}`;
  15. });
  16. return entries;
  17. };
  18. module.exports = {
  19. // 指定打包目标为 Electron 的主进程环境,确保 Webpack 能针对 Electron 主进程的特性进行打包。
  20. target: 'electron-main',
  21. // 将 entry 设置为 getEntries() 的返回值,这样 Webpack 会根据动态获取的入口文件进行打包。
  22. entry: getEntries(),
  23. output: {
  24. path: path.resolve(__dirname, 'dist'),
  25. // filename: '[name].js' 表示输出的文件名会根据入口名称来生成,这样可以保证按照文件夹分类打包。
  26. filename: '[name].js',
  27. // 打包的库的模块类型,根据你写的代码,支持的写法有关,可以根据 ExeMainApp\package.json 的 "type": "commonjs", 配置来
  28. // libraryTarget: 'umd',
  29. libraryTarget: 'commonjs2',// 让 Webpack 以 CommonJS 模块格式输出打包后的代码,便于 Node.js 和 Electron 环境使用。
  30. // libraryTarget: 'commonjs',
  31. },
  32. node: {
  33. // __dirname: false 和 __filename: false 使 Webpack 不改变 Node.js 中 __dirname 和 __filename 的行为,保证在打包后的代码里这些变量可以正常使用。
  34. __dirname: false,
  35. __filename: false
  36. },
  37. /**
  38. * 采用自定义函数来处理外部模块。正则表达式 /^[a-z\-0-9]+$/ 用于匹配 Node.js 核心模块和 node_modules 中的第三方模块,
  39. * 并将它们排除在打包范围之外,以 commonjs 形式引入,避免将这些模块打包进最终文件。
  40. */
  41. externals: [
  42. function ({ context, request }, callback) {
  43. if (/^[a-z\-0-9]+$/.test(request)) {
  44. return callback(null, `commonjs ${request}`);
  45. }
  46. callback();
  47. }
  48. ],
  49. resolve: {
  50. extensions: ['.js'],
  51. modules: [path.resolve(__dirname, 'src'), 'node_modules']
  52. },
  53. module: {
  54. // 使用 babel-loader 配合 @babel/preset-env 对 JavaScript 文件进行转译,确保代码能在目标环境中正常运行。
  55. rules: [
  56. {
  57. test: /\.js$/,
  58. exclude: /node_modules/,
  59. use: {
  60. loader: 'babel-loader',
  61. options: {
  62. presets: ['@babel/preset-env']
  63. }
  64. }
  65. }
  66. ]
  67. }
  68. };