用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
SQL-Server
›
【附源码】Electron Windows桌面壁纸开辟中的 CommonJS ...
【附源码】Electron Windows桌面壁纸开辟中的 CommonJS 和 ES Module 引入 ...
熊熊出没
论坛元老
|
2024-12-19 05:53:37
|
显示全部楼层
|
阅读模式
楼主
主题
1781
|
帖子
1781
|
积分
5343
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
背景
在尝试让 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
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 怎样才能正常使用?
webpack 打包后的代码一般我们从来都不会遇到这种 ES Module 的题目,缘故原由是 webpack 打包会把所有的代码都进行预编译整合,也即将代码从 node_module 拷贝出来,然后再经过 babel 等的转化,塞入打包后的代码里,最后同一用 require 的方式进行引入
而基于 electron 的开辟,所有的 js 都可以取自当地,由于基于 commonJS 协议的方式更符合开辟当地开辟方式,因此 Webpack 可以把一些代码不打包进去,直接保留 require("vue") 引入方式,如许不但低落了最终打包文件的体积大小,还能动态的引入所需的代码,整体性能就很高
所以白名单这里就是不让 webpack 打包,默认整个生产依赖都要打包进去
但是 wallpaper 默认是 ES Module 就必须转化成 CommonJS 形式,于是就把代码进行预编译,然后塞到 main.js 中去,如许 wallpaper 整个源码就被构建进去了,也就不存在原来 type:"module"引入的概念
总结
webpack打包 electron 都是基于 CommonJS 方式,使用的是 require 来引入
如果遇到 ES Module 模块,则将其加入到 whiteListModules 列表中,直接打包到 webpack 里面即可
其他没有什么好办法,能让 electron 既支持 CommonJS 又支持 ES Module,两者自然辩说
也没有必要去理解这方面的题目,由于大部分情况,都被 webpack 搞定了
除非你自己想从零构建一个纯粹的 ES Module 项目,但是只要你给别人用,或者引用别人的代码,那么要改后缀名为.cjs,目前我觉得你是得头大的
无论是源码用了多少 import from 的写法,webpack 最终都是给你整合成 require,fetch 的方式来搞事情
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
熊熊出没
论坛元老
这个人很懒什么都没写!
楼主热帖
数据库的三大范式
创建SQL server服务器
在字节跳动干软件测试5年,4月无情被辞 ...
2年自动化测试经验,连基础的都不会, ...
TortoiseGit间接处理linux目录下的仓库 ...
神经网络与深度学习
Java 知识 - 接口代理
django小项目 ----- 创建错题集 ...
ZYNQ从放弃到入门(十二)- AMP — Zyn ...
基于遗传算法的最优潮流问题的研究(Ma ...
标签云
集成商
AI
运维
CIO
存储
服务器
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表