webpack4 target:“electron-renderer“ 打包加速配置

news/2024/9/28 16:21:58/

背景

昨天写得一篇Electron-vue asar 局部打包优化处理方案——绕开每次npm run build 超级慢的打包问题-CSDN博客文章浏览阅读754次,点赞19次,收藏11次。因为组员对于 Electron 打包过程存在比较迷糊的状态,且自己也没主动探索 Electron-vue 打包细节,导致每次打包过程都消耗 5-6 分钟的时间,在需要测试生产打包时,极其浪费时间,为此针对 Electron-vue 打包的几个环节进行拆解,来减少打包时间,提高开发效率。https://blog.csdn.net/wangsenling/article/details/142364579

打包超级慢的原因不是最终electron-builder环节的问题,而是webpack打包渲染进程的问题,今天经过与ChatGPT一起优化,终于把速度降了大概5倍左右,直接让文件打包速度快了很多。

具体配置

1. 主要是多进程处理,这里追加了4个worker,自己的cpu核心有几个可以配置几个,这个主要加速点

2. 去掉了原来的一个没有用的plugin

3. 增加了缓存机制

'use strict'process.env.BABEL_ENV = 'renderer'const path = require('path')
const {dependencies} = require('../package.json')
const webpack = require('webpack')const CopyWebpackPlugin = require('copy-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const {VueLoaderPlugin} = require('vue-loader')
const TerserPlugin = require('terser-webpack-plugin');/*** List of node_modules to include in webpack bundle** Required for specific packages like Vue UI libraries* that provide pure *.vue files that need compiling* https://simulatedgreg.gitbooks.io/electron-vue/content/en/webpack-configurations.html#white-listing-externals*/
let whiteListedModules = ['vue', 'element-ui']let rendererConfig = {// 添加以下一行,设置 modemode: process.env.NODE_ENV === 'production' ? 'production' : 'development',devtool: process.env.NODE_ENV === 'production' ? false : '#cheap-module-eval-source-map',entry: {renderer: path.join(__dirname, '../src/renderer/main.js'),},externals: [...Object.keys(dependencies || {}).filter((d) => !whiteListedModules.includes(d)),],module: {rules: [{test: /\.scss$/,use: ['vue-style-loader', 'css-loader', 'sass-loader'],},{test: /\.sass$/,use: ['vue-style-loader', 'css-loader', 'sass-loader?indentedSyntax'],},{test: /\.less$/,use: ['vue-style-loader', 'css-loader', 'less-loader'],},{test: /\.css$/,use: ['vue-style-loader', 'css-loader'],},{test: /\.html$/,use: 'vue-html-loader',},{test: /\.js$/,use: [{loader: 'thread-loader',options: {workers: 4, // 设置 worker 数量},}, {loader: 'babel-loader',options: {cacheDirectory: true}}],exclude: /node_modules/,},{test: /\.node$/,use: 'node-loader',},{test: /\.vue$/,use: {loader: 'vue-loader',options: {extractCSS: process.env.NODE_ENV === 'production',loaders: {sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1',scss: 'vue-style-loader!css-loader!sass-loader',less: 'vue-style-loader!css-loader!less-loader',},},},},{test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,use: {loader: 'url-loader',query: {limit: 10000,name: 'imgs/[name]--[folder].[ext]',},},},{test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,loader: 'url-loader',options: {limit: 10000,name: 'media/[name]--[folder].[ext]',},},{test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,use: {loader: 'url-loader',query: {limit: 10000,name: 'fonts/[name]--[folder].[ext]',},},},],},node: {__dirname: process.env.NODE_ENV !== 'production',__filename: process.env.NODE_ENV !== 'production',},plugins: [new VueLoaderPlugin(),new MiniCssExtractPlugin({filename: 'styles.css'}),new HtmlWebpackPlugin({filename: 'index.html',template: path.resolve(__dirname, '../src/index.ejs'),templateParameters(compilation, assets, options) {return {compilation: compilation,webpack: compilation.getStats().toJson(),webpackConfig: compilation.options,htmlWebpackPlugin: {files: assets,options: options,},process,}},minify: {collapseWhitespace: true,removeAttributeQuotes: true,removeComments: true,},nodeModules:process.env.NODE_ENV !== 'production'? path.resolve(__dirname, '../node_modules'): false,}),new webpack.NoEmitOnErrorsPlugin(),],output: {filename: '[name].js',chunkFilename: "cities/[name].js",libraryTarget: 'commonjs2',path: path.join(__dirname, '../dist/electron'),},resolve: {alias: {'@': path.join(__dirname, '../src/renderer'),vue$: 'vue/dist/vue.esm.js',},extensions: ['.js', '.vue', '.json', '.css', '.node'],},optimization: {minimize: true,minimizer: [new TerserPlugin({parallel: true, // 开启多线程压缩cache: true,terserOptions: {// 在这里添加 Terser 的配置选项compress: {drop_console: true, // 例如,移除 console.log},},}),],},target: 'electron-renderer',
}/*** Adjust rendererConfig for development settings*/
if (process.env.NODE_ENV !== 'production') {rendererConfig.plugins.push(new webpack.HotModuleReplacementPlugin(),new webpack.DefinePlugin({__static: `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"`,}))
}/*** Adjust rendererConfig for production settings*/
if (process.env.NODE_ENV === 'production') {rendererConfig.devtool = ''rendererConfig.plugins.push(new CopyWebpackPlugin([{from: path.join(__dirname, '../static'),to: path.join(__dirname, '../dist/electron/static'),ignore: ['.*'],},]),new webpack.DefinePlugin({'process.env.NODE_ENV': '"production"',}))
}module.exports = rendererConfig


http://www.ppmy.cn/news/1530951.html

相关文章

su 命令:一键切换用户身份、提高su命令安全性的建议

一、命令简介 ​su ​命令是 Linux 和 Unix 系统中的一个实用工具,用于切换用户身份。它允许当前登录用户在不退出登录会话的情况下,切换到另一个用户的身份。通常,su ​用于从普通用户切换到 root 用户,或从 root 用户切换到其他…

激光slam学习笔记4--slam_in_autonomous_driving编译碰到问题汇总

背景:项目需要,学习一些imu姿态估计知识。从组长那边借来高翔新作:自动驾驶与机器人中的slam技术,仔细看一看。环境,ubuntu20.04。 一、资料准备 课本对应的代码 一些依赖,首先参考github上对应的readme介…

基于SpringBoot+Vue+MySQL的特色旅游网站系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着旅游业的蓬勃发展,人们对旅游体验的需求日益多样化与个性化。传统的旅游信息查询与预订方式已难以满足现代游客的需求。因此,我们开发了这款基于SpringBootVueMySQL的特色旅游网站系统。该系统旨在通…

数据结构-3.1.栈的基本概念

一.栈的定义: 栈和线性表的区别:栈只能在表尾一端进行插入或者删除的操作,而线性表可以在任意一个地方进行插入或者删除 二.有关栈的关键术语: 三.栈的基本操作: 1.回顾线性表的基本操作: 2.栈的基本操作&…

【Python报错已解决】TypeError: can only concatenate str (not “int“) to str

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

金融领域的人工智能——Palmyra-Fin 如何重新定义市场分析

引言 DigiOps与人工智能 正在改变全球各行各业,并带来新的创新和效率水平。人工智能已成为金融领域的强大工具,为市场分析、风险管理和决策带来了新方法。金融市场以复杂性和快速变化而闻名,人工智能处理大量数据并提供清晰、可操作的见解的…

[笔记]数据结构

文章目录 堆排序215 数组中第k个最大元素 堆排序 堆排序方法对于记录数较少的文件并不值得提倡,但对n较大的文件还是有效 运行时间主要耗费在: 建立初始堆调整建立新堆 反复筛选 筛选算法进行的关键字比较次数至多为: 2 ( k − 1 ) 2(k-1)…

FPGA题目记录2

1、下列总线中属于AMBA总线的是:(D) A、SPI B、PCIe C、I2C D、ASB AMBA是由ARM公司研发推出的一种高级微控制器总线架构(Advanced Microcontroller Bus Architecture)。其中AMBA包含了四种不同的总线标准,分别是:AHB…