TypeScript on Electron 解决 Renderer 没有 exports 的问题

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 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">