当前位置: 首页 > news >正文

【附源码】Electron Windows桌面壁纸开发中的 CommonJS 和 ES Module 引入问题以及 Webpack 如何处理这种兼容

背景

在尝试让 ChatGPT 自动开发一个桌面壁纸更改的功能时,发现引入了一个 wallpaper 库,这个库的入口文件是 index.js,但是 package.json 文件下的 type:"module",这样造成了无论你使用 import from 还是 require,都会报 ES Module 引入错误,针对于这个问题,让 GPT 给了很多方案,但是都没有解决实质问题,最终,经过多次测试,发现必须借助打包工具 webpack 才能搞定这个事情。

案例代码

node version:16

这个是用的wallpaper库,这个库有bug,双屏幕失效

simple-electron-demo: 从一个简单的electron初始库开始从零解说electron的运行过程 - Gitee.com

另外在B站上看到一个视频也是搞壁纸的,对方的代码无法运行 node:18 作者也没修复,里面看用的koffi 调用一个dll,这个dll估计是作者自己打的动态连接库,但是这个没有地方可以控制伸缩,代码也放在这里

simple-electron-demo: 从一个简单的electron初始库开始从零解说electron的运行过程 - Gitee.com

B站视频连接(作者堆了一堆buffer,然后把代码搞到build报错,实际上一个前端开发真没必要用typescript和vue3这些东西,尤其是vite,给开发带不来任何效率提升,却外加了很多不必要学习的知识,就是前端内卷的一种方式吧)

Vue3+electron实现桌面壁纸更换2.0版本(已完成macOS静态壁纸更换,后续功能开发中)_哔哩哔哩_bilibili

 注意:如你遇到vue-tsc.js 68行错误的报错,按照作者的提示,直接注释这行,然后就可以build:win

 

webstorm的使用用户会遇到没有提示的问题,建议将tsconfig.web.json中的别名,拷贝到tsconfig.json 中,webstorm识别不强,这样@renderer路径就能被识别了,另外关掉eslint提示,这个会造成一堆报错,还没啥意义

 

Electron 官网对 ES Module 的建议

Electron中的 ES 模块 (ESM) | Electron

没有看太懂,大概就是必须开启 type:"module",然后引入的 js 必须是.mjs后缀,否则就会报错,另外大家就是讲了在哪些情况,你开了 module 就会导致渲染进程无法访问 node_modules 中的文件,也无法访问 node api 接口

一个 ES Module 库:wallpaper

它的入口文件是 index.js 而 package.json 中 type 设为 module,这就使得引入这个库的 wallpaper 也得支持 type:"module",否则无法使用这个库,一般像 vue,都会给两个字段,一个是 main,一个是 module,以任意一种项目选择性引入

那么 ES Module 怎样才能正常使用?

  1. webpack 打包后的代码一般我们从来都不会遇到这种 ES Module 的问题,原因是 webpack 打包会把所有的代码都进行预编译整合,也即将代码从 node_module 拷贝出来,然后再经过 babel 等的转化,塞入打包后的代码里,最后统一用 require 的方式进行引入

  2. 而基于 electron 的开发,所有的 js 都可以取自本地,因为基于 commonJS 协议的方式更符合开发本地开发方式,因此 Webpack 可以把一些代码不打包进去,直接保留 require("vue") 引入方式,这样不但降低了最终打包文件的体积大小,还能动态的引入所需的代码,整体性能就很高

  3. 所以白名单这里就是不让 webpack 打包,默认整个生产依赖都要打包进去

  4. 但是 wallpaper 默认是 ES Module 就必须转化成 CommonJS 形式,于是就把代码进行预编译,然后塞到 main.js 中去,这样 wallpaper 整个源码就被构建进去了,也就不存在原来 type:"module"引入的概念

总结

  1. webpack打包 electron 都是基于 CommonJS 方式,使用的是 require 来引入

  2. 如果遇到 ES Module 模块,则将其加入到 whiteListModules 列表中,直接打包到 webpack 里面即可

  3. 其他没有什么好办法,能让 electron 既支持 CommonJS 又支持 ES Module,两者天然冲突

  4. 也没有必要去理解这方面的问题,因为大部分情况,都被 webpack 搞定了

  5. 除非你自己想从零构建一个纯粹的 ES Module 项目,但是只要你给别人用,或者引用别人的代码,那么要改后缀名为.cjs,目前我觉得你是得头大的

  6. 无论是源码用了多少 import from 的写法,webpack 最终都是给你整合成 require,fetch 的方式来搞事情

相关文章:

【附源码】Electron Windows桌面壁纸开发中的 CommonJS 和 ES Module 引入问题以及 Webpack 如何处理这种兼容

背景 在尝试让 ChatGPT 自动开发一个桌面壁纸更改的功能时,发现引入了一个 wallpaper 库,这个库的入口文件是 index.js,但是 package.json 文件下的 type:"module",这样造成了无论你使用 import from 还是 require&…...

Elasticsearch介绍及安装部署

Elasticsearch介绍 Elasticsearch 是一个分布式搜索引擎,底层基于 Lucene 实现。Elasticsearch 屏蔽了 Lucene 的底层细节,提供了分布式特性,同时对外提供了 Restful API。Elasticsearch 以其易用性迅速赢得了许多用户,被用在网站…...

物理层知识要点

文章目录 物理层接口的四大特性通信基础编码和调制(1)数字数据编码为数字信号(2)模拟数据编码为数字信号(3)常见调制方式(3)信道的极限容量 多路复用技术数据传输方式物理层下的传输…...

SpringBoot 自动装配原理及源码解析

目录 一、引言 二、什么是 Spring Boot 的自动装配 三、自动装配的核心注解解析 3.1 SpringBootApplication 注解 (1)SpringBootConfiguration: (2)EnableAutoConfiguration: (3&#xf…...

Craft CMS 模板注入导致 Rce漏洞复现(CVE-2024-56145)(附脚本)

0x01 产品描述: ‌Craft CMS‌ 是一个灵活且强大的内容管理系统(CMS),专为创意团队和开发人员设计,提供高度可定制、直观且性能优越的网站和内容管理解决方案。它以用户友好的界面、强大的插件生态系统以及支持现代web开发最佳实践的特性而闻名‌0x02 漏洞描述: 由于模板…...

Next.js 新手容易犯的错误 _ 加载与缓存管理的关键(5)

1 错误地处理搜索参数(Search Params) 问题是什么? 在 Next.js 中,搜索参数指的是 URL 中用 ?keyvalue 表示的部分,比如 https://example.com/products?colorred 中的 colorred。这通常用于过滤、排序或选择某些选…...

/etc/fstab 文件学习systemd与该文件关系

文章目录 一、文件字段1.1、设备标识1.2、挂载点1.3、文件系统类型1.4、挂载选项1.5、dump1.5、fsck顺序 二、/etc/fstab 与systemd 的关系2.1、/etc/fstab 与systemd 的关系2.2、systemd 之前/etc/fstab生效过程2.3、systemd 时代/etc/fstab生效过程 三、相关知识3.1、如何更具…...

从源码分析swift GCD_DispatchGroup

前言: 最近在写需求的时候用到了DispatchGroup,一直没有深入去学习,既然遇到了那么就总结下吧。。。。 基本介绍: 任务组(DispatchGroup) DispatchGroup 可以将多个任务组合在一起并且监听它们的完成状态。…...

25计软新增考研院校!或可捡漏上岸!

C哥专业提供——计软考研院校选择分析专业课备考指南规划 新增的计算机与软件工程考研院校为考研同学带来了多方面的机遇,这些机遇不仅体现在过国家线后可能面临的更低竞争压力,还包括更多元化的教育选择和更广阔的就业前景: 一、降低竞争压…...

C# 线程安全集合

文章目录 引言一、ConcurrentBag<T>二、ConcurrentQueue<T>三、ConcurrentStack<T>四、ConcurrentDictionary<TKey, TValue>五、总结引言 在多线程编程环境中,多个线程可能同时访问和操作集合数据。如果使用普通集合,很容易引发数据不一致、错误结果…...

箱包发霉怎么处理 箱包发霉处理修复方法

箱包发霉怎么处理&#xff1f;箱包不仅是我们出行的必需品&#xff0c;更是承载着个人风格与品味的时尚配饰。然而箱包工厂生产的箱包&#xff0c;在潮湿多变的环境中&#xff0c;箱包很容易成为霉菌滋生的温床&#xff0c;尤其是那些长时间储存的箱包&#xff0c;更是霉菌的“…...

【每日学点鸿蒙知识】Charles抓包、lock文件处理、WebView组件、NFC相关、CallMethod失败等

1、HarmonyOS系统中如何使用Charles抓包&#xff1f; 在HarmonyOS操作系统中&#xff0c;使用Charles进行抓包的步骤如下&#xff1a; 在Charles中设置代理。 首先&#xff0c;在Charles的菜单栏上选择“Proxy”→“Proxy Settings”&#xff0c;然后填入代理端口&#xff0…...

【异常】GL-SFT1200路由器中继模式,TL-CPE1300D无法搜寻5G网问题分析

【异常】GL-SFT1200路由器中继模式,TL-CPE1300D无法搜寻5G网问题 情况实验结论情况 在用GL-SFT1200路由器切换中继模式时,由于web密码忘却,需要重置,但根据官网使用手册,或者对应的中文版手册,重置失败。通过跟商家联系,进行uboot刷机,提供了指导文档,尝试后刷机成功…...

LINUX--shell

函数 格式&#xff1a; func() { command } function 关键字可写&#xff0c;也可不写。 示例 1&#xff1a; #!/bin/bash func() { #定义函数 echo "Hello $1" } func world #执行主文件 # bash test.sh Hello world 数组 数组是相…...

TCP常见问题

文章目录 一、两种状态图二、常见问题1、MSL是什么 3、为何等待2MSL3、为何三次握手&#xff0c;不握手、握手一次、两次行吗4、为何四次挥手&#xff0c;三次行吗&#xff0c;两次行吗 一、两种状态图 四次挥手 二、常见问题 1、MSL是什么 MSL是Maximum Segment Lifetime的英…...

OpenCV学习——图像融合

import cv2 as cv import cv2 as cvbg cv.imread("test_images/background.jpg", cv.IMREAD_COLOR) fg cv.imread("test_images/forground.png", cv.IMREAD_COLOR)# 打印图片尺寸 print(bg.shape) print(fg.shape)resize_size (1200, 800)bg cv.resize…...

网速、续航双在线!2024随身WiFi品牌精选推荐!格行按键切三网值得买吗?

随身wifi这个东西大家用的还是蛮多的&#xff0c;特别是一些户外工作的人员&#xff0c;往往都需要配备一个随身wifi&#xff0c;这样户外工作的时候才有网络&#xff0c;工作才会比较方便一些。今天就来盘点2024年热门随身wifi哪个牌子的好用&#xff1f; 1.华为&#xff1a;通…...

ubuntu18.04连接不上网络问题

现象&#xff1a;右上角的网络图标消失&#xff0c;仅剩输入法、音量和开关图标&#xff0c;ifconfig只显示本地回环 原因&#xff1a;网络适配器未开启 解决&#xff1a; 1. 查看网络状态&#xff1a;cat /var/lib/NetworkManager/NetworkManager.state 这里显示是false&a…...

访谈积鼎科技总经理:国产CFD软件发展与未来趋势展望

傅彦国&#xff0c;上海积鼎信息科技有限公司创始人 记者&#xff1a;请傅总介绍下我国流体仿真行业的发展现状是怎样的&#xff1f; 傅彦国&#xff1a;自2018年政府加大了对核心技术自主研发的支持力度&#xff0c;国产CFD软件逐渐步入发展正轨。 首先&#xff0c;从市场规…...

【Linux知识】exec命令行详解

文章目录 概述主要用途和 bash 有什么区别&#xff1f; 概述 在 Linux 系统中&#xff0c;exec 命令用于执行一个可执行文件&#xff0c;替换当前进程的映像。也就是说&#xff0c;当你在终端中使用 exec 命令后&#xff0c;当前的 shell 会被替换为 exec 指定的程序&#xff…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...