打包了一个electron应用,引入一个部署好的网页。意外发现,之前在浏览器好好的功能,此刻在electron内部却出现报错:
"$ is not defined"\"jQuery is not defined"\ "Luckysheet is not defined" .....
总之,报了一大堆错误,全部找不到对应的模块。
后来查了资料,才知道在使用electron的时候,开启了node环境:
// 创建window时,开启了node环境
// 所以之前浏览器环境好好的功能在这里完全没用了
// 因为nodejs是commonjs规范,而jquery并非通过require引入的,所以在node环境中找不到了
win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true // 开启了node环境
},
icon: path.join(__dirname, "./favicon.ico"),
});
那么知道问题出在哪里,就可以解决了。
解决方案:
第一, 关闭node环境。
直接将上边的参数设置为false。但是注意 ,一旦设置为false,你的应用将不再支持nodejs环境,你如果编写了nodejs程序或者使用了nodejs进程通信,这些功能将受到影响。
第二,使用commonjs规范引入jquery。
1. 安装依赖
npm i jQuery
2. 引入依赖(在index.html中)
<script>window.$ = window.jQuery = require('jquery');</script>
如果觉得以上两种,都不太好用。那么第三种是终极解决方案。
第三,终极解决。
<!-- Insert this line above script imports -->
<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
<!-- normal script imports etc -->
<script src="scripts/jquery.min.js"></script>
<script src="scripts/vendor.js"></script>
<!-- Insert this line after script imports -->
<script>if (window.module) module = window.module;</script>
最后,将我查找资料的几个有用的链接放在这里,需要的可以查看:
Electron: jQuery is not defined - Stack Overflow
jQuery isn't set globally because "module" is defined · Issue #254 · electron/electron · GitHub