webpack.main.build.config.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. path: path.resolve(__dirname, 'outApp/HelloWorld-win32-x64/resources/app/src'),
  26. // filename: '[name].js' 表示输出的文件名会根据入口名称来生成,这样可以保证按照文件夹分类打包。
  27. filename: '[name].js',
  28. // 打包的库的模块类型,根据你写的代码,支持的写法有关,可以根据 ExeMainApp\package.json 的 "type": "commonjs", 配置来
  29. // libraryTarget: 'umd',
  30. libraryTarget: 'commonjs2',// 让 Webpack 以 CommonJS 模块格式输出打包后的代码,便于 Node.js 和 Electron 环境使用。
  31. // libraryTarget: 'commonjs',
  32. },
  33. node: {
  34. // __dirname: false 和 __filename: false 使 Webpack 不改变 Node.js 中 __dirname 和 __filename 的行为,保证在打包后的代码里这些变量可以正常使用。
  35. __dirname: false,
  36. __filename: false
  37. },
  38. /**
  39. * 采用自定义函数来处理外部模块。正则表达式 /^[a-z\-0-9]+$/ 用于匹配 Node.js 核心模块和 node_modules 中的第三方模块,
  40. * 并将它们排除在打包范围之外,以 commonjs 形式引入,避免将这些模块打包进最终文件。
  41. */
  42. externals: [
  43. function ({ context, request }, callback) {
  44. if (/^[a-z\-0-9]+$/.test(request)) {
  45. return callback(null, `commonjs ${request}`);
  46. }
  47. callback();
  48. }
  49. ],
  50. resolve: {
  51. extensions: ['.js'],
  52. modules: [path.resolve(__dirname, 'src'), 'node_modules']
  53. },
  54. module: {
  55. // 使用 babel-loader 配合 @babel/preset-env 对 JavaScript 文件进行转译,确保代码能在目标环境中正常运行。
  56. rules: [
  57. {
  58. test: /\.js$/,
  59. exclude: /node_modules/,
  60. use: {
  61. loader: 'babel-loader',
  62. options: {
  63. presets: ['@babel/preset-env']
  64. }
  65. }
  66. }
  67. ]
  68. }
  69. };