我有一个在电子中运行的aurelia应用程序。我的源文件是打字稿,我有电子和节点的环境typings。
因为我知道我正在编译用于电子,我正在将我的打字稿转换为es6并使用系统模块加载;这意味着我可以将system.js的transpiler 关闭。我正在使用system.js和jspm,因为这是Aurelia一直在推动的方法。
所以在我的ts文件中:我希望能够做到:
import {remote} from 'electron';
不幸的是,system.js对模块 electron 一无所知,并且在运行时失败。另一方面,TypeScript非常高兴,因为我设置了电子和节点的类型;我也在VSCode中获得了完整的智能感知。
注意:如果您尝试在标头中执行var electron = require('electron');
,则system.js会干扰它并且无法加载。 You can place that 'require('electron')' within a class or function and it will work,但我找不到这个理想。
问题: 如何让system.js正确返回电子'模块只有在电子邮件中运行应用程序时才可用?
答案 0 :(得分:0)
一个解决方案 - 希望有更好的方法 - 我想出的是为system.js填充电子模块,并将其直接链接到require('electron')
的内容:
<强> electron.js 强>
System.register([], function (exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var electron;
return {
setters: [],
execute: function () {
electron = require('electron');
exports_1("default", electron);
Object.keys(electron).forEach(function (key) {
exports_1(key, electron[key]);
});
}
}
});
这有效地包裹了内部电子模块,并允许system.js了解它。有用;但希望有其他人知道的更优雅/内置的方式。
您不需要对typecypt进行任何映射或更改,因为import {remote} from 'electron'
将尝试解析electron.js
作为最后的手段。