发现是这个原因:
webPreferences: { // preload: path.join(__dirname, 'preload.js'), nodeIntegration: true, contextIsolation: false, }
把nodeIntegration和contextIsolation恢复默认值即可解决。
原因是渲染进程集成了Node.js运行环境,必须以node.js的方式去运行$函数,也就是需要let $ = require等方式去使用外部函数。
新手的思考:
这样的话,未来可以在preload.js中放node.js环境相关的东西,render.js中放纯浏览器JS环境的东西。
为了便于项目迁移,始终将渲染进程和node.js环境保持隔离,render.js中完全不放node.js相关的东西,不必把node.js的API刻意暴露给render.js使用(可以基于项目需要在preload.js中实现),这样或许就可以实现WEB应用程序和桌面应用程序的方便转换。