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

背景

昨天写得一篇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.xdnf.cn/news/145601.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Cypress初次安装启动常见问题

安装成功后会出现如图所示目录和文件 Cypress启动问题 进入node_modules下的.bin 目录,执行命令: cypress open 启动cypress,此时会有一个报错,如图 需要进入项目目录,编辑package.json文件中scripts配置 此时再次启动CMD,进入根…

揭开 Vue 3 中大量使用 ref 的隐藏危机

在 Vue 3 中,ref 是用来创建响应式的引用,它能够追踪和管理单一的变量或对象。当代码中大量使用 ref 时,虽然可以实现对各个状态或数据的精细控制,但也会带来一些问题和潜在影响。 1. 大量使用 ref 带来的问题 1、代码冗长与维护…

第10章 面向对象编程(高级部分)

第10章 面向对象编程(高级部分) 文章目录 第10章 面向对象编程(高级部分)10.1 类变量和类方法10.1.1 类变量-提出问题10.1.2 传统的方法来解决10.1.3 类变量快速入门10.1.4 类变量内存布局10.1.5 什么是类变量10.1.6 如何定义类变量10.1.8 类变量使用注意事项和细节讨论10.1.9 …

JavaScript - Document文档操作

1. 前言 ​​​​​​​ 编写网页时,我们需要时刻操作文档进而完成我们想要的效果。这就是通过文档对象模型实现,使用Document对象控制HTML以及样式信息的API 2. Document的树结构 在了解Document文档对象模型之前,我们先了解Dom的树结构 …

pg入门1——使用容器启动一个pg

1. 下载pg镜像 地址: https://hub.docker.com/r/bitnami/postgresql 下载镜像: docker pull bitnami/postgresql:16.3-alpine3.20 2. 运行镜像 docker run -e POSTGRES_PASSWORDAb123456! -d bitnami/postgresql:16.3-alpine3.20 3. 查看、进入容…

如何使用VMware安装Linux操作系统

使用VMware安装Linux操作系统。以Cont OS为例进行说明。 准备工作: 下载并安装VMware: 下载地址:https://support.broadcom.com/ 下载好VMware,就是吧下载好的VMware安装,只需要“下一步”就行,只是到路径…

惠海H6118 DC-DC 降压恒流芯片30V36v40V48V降12V9V24V36V 1.2A大电流 调光降压芯片IC舞台灯

H6118是一款连续电感电流导通模式的降压型LED恒流驱动器,用于驱动一个或多个LED灯串。H6118工作电压从4V到30V,提供可调的输出电流,最大输出电流可达到1.2A。 H6118内置功率开关管,采用高端电流检测电路,支持PWM模式调…

即时通讯框架MobileIMSDK的H5端开发快速入门

► 相关链接: ① MobileIMSDK-H5端的详细介绍② MobileIMSDK-H5端的开发手册new(* 精编PDF版) 一、技术准备 您是否已对Web端即时通讯技术有所了解? 1)新手入门贴:史上最全Web端即时通讯技术原理详解2&…

提前解锁 Vue 3.5 的新特性

Vue 3.5 是 Vue.js 新发布的版本,虽然没有引入重大变更,但带来了许多实用的增强功能、内部优化和性能改进。 1. 响应式系统优化 Vue 3.5 进一步优化了响应式系统的性能,并且减少内存占用。尤其在处理大型或深度嵌套的响应式数组时&#xff…

【论文阅读】Grounding Language with Visual Affordances over Unstructured Data

Abstract 最近的研究表明,大型语言模型(llms)可以应用于将自然语言应用于各种各样的机器人技能。然而,在实践中,学习多任务、语言条件机器人技能通常需要大规模的数据收集和频繁的人为干预来重置环境或帮助纠正当前的…

unix中如何查询和修改进程的资源限制

一、前言 一个进程在运行时,会用到各种资源,比如cpu的使用时间、内存空间、文件等等。那么,一个进程能够占用多少资源呢?cpu使用的时间有多长?进程空间有多大?能够创建多少个文件?这个就是本文…

【数据结构】设有一带头结点的单链表,编程将链表颠倒过来。要求不用另外的数 组或结点完成。

编程题: 设有一带头结点的单链表,编程将链表颠倒过来。要求不用另外的数 组或结点完成。 分析: 该算法通过维护三个指针(prev、curr 和 next)逐步遍历单链表,实现链表的逆转。在遍历过程中,curr 的 next 指针被更新为指向 prev,逐步反转指向。最终,头结点的 next 指针…

用户态缓存:高效数据交互与性能优化

目录 1. 用户态缓存区工作背景 1.1 为什么每条连接都需要读写缓存区 1.1.1 读缓存区(Read Buffer) 1.1.2 写缓存区(Write Buffer) 1.2 用户态缓存区的工作流程 1.3 用户态缓存区的重要性 2. UDP 和 TCP 的设计差异 2.1 UD…

Python模块和包:标准库模块(os, sys, datetime, math等)②

文章目录 一、os 模块1.1 获取当前工作目录1.2 列出目录内容1.3 创建和删除目录1.4 文件和目录操作 二、sys 模块2.1 获取命令行参数2.2 退出程序2.3 获取 Python 版本信息 三、datetime 模块3.1 获取当前日期和时间3.2 日期和时间的格式化3.3 日期和时间的运算 四、math 模块4…

私有化聊天软件成为企业内部通讯新趋势

在数字化转型浪潮的推动下,企业对于高效、安全、灵活的内部通讯需求日益增长。传统的电子邮件、电话会议等沟通方式已难以满足现代企业对即时性、协作性和信息安全性的要求。因此,私有化聊天工具作为企业内部通讯的定制化解决方案,正逐渐成为…

我的数据库第一课:从懵懂到启迪

我的数据库第一课:从懵懂到启迪 前言 在数字化浪潮席卷全球的今天,数据库作为IT技术的“活化石”,已经成为不可或缺的基础设施。特别是在国内,随着经济的飞速发展和信息化建设的推进,数据库技术也经历了从无到有、从…

企业微信用户授权与校验完整对接流程

Hello!欢迎各位新老朋友来看小弟博客,祝大家事业顺利,财源广进!! 主题:企业微信用户授权与校验完整对接流程 一:构造第三方应用授权链接 如果第三方应用需要在打开的网页里面携带用户的身份信息…

解锁数字转型新纪元:Vatee万腾平台,您的智能加速与策略智库

在数字经济时代的大潮中,企业的数字化转型已不再是选择题,而是必答题。面对这一挑战,Vatee万腾平台以其卓越的技术实力和前瞻性的战略视野,成为了众多企业加速数字化转型、实现智能化升级的得力助手和智囊团。 加速转型&#xff…

个人量化成功之路-----用代码一键画图Donchian Channel(唐奇安通道指标)

Donchian Channel(唐奇安通道指标)是用于交易突破的最古老、最简单的技术指标之一。是由Richard Donchian 提出的一个由三条线(上阻力线、下支撑线、中心线)组成的通道指标。 一般来说,唐奇安通道的宽度越宽&#xff0…

ISSCC34.7解析一种具备内存编码与刷新功能的eDRAM查找表数字存内计算芯片

一、引言 1. DCIM概述 数字存内计算(Digital Computing-in-Memory, DCIM)是一种将计算操作直接集成到存储单元中的新兴计算架构。传统计算模型(冯诺依曼架构)中的计算和存储是分离的,数据必须频繁在存储器和处理单元…