Electron 的 Renderer process 虽然和 main process 是不同的进程,但依然可以使用 node 的环境,比如 require(‘fs’) 之类. 但如果一个 js 脚本是在浏览器环境中用 <script> 标签加载的话,exports 变量是缺的,会报 exports is not defined.
而解决方法是不要使用 <script src=”./script.js”></script> 而是 <script>require(‘script’);</script>. 这样所有的脚本就是以 module 的方式加载而不是页面脚本了. 以 module 方式加载的脚本是有 exports 变量的.
而这件事和 TypeScript 的关系在于,使用 tsc 编译的时候需要指定使用什么 module. node.js 使用的是 commonJS,那自然就是编译到 commonJS. 但这样就会引起没有 exports 变量的问题而引起报错. 而 Renderer 中也不能使用 browerify,因为 browserify 会使用自己的一套 require 系统而不是复用 node 的 require. 另一个潜在的解决方法是直接编译到 ES6 的 module(import,export),然而 node.js 直到 8.5.0 才支持 ES6 module,而最新的 Electron 使用的 node 版本只到 8.2.0,虽然目前的 master 上已经在使用 8.7.0 了,但下一次 beta release 遥遥无期.
0 条评论。