Aurelia:使用 es6 导入电子 + 打字稿
Posted
技术标签:
【中文标题】Aurelia:使用 es6 导入电子 + 打字稿【英文标题】:Aurelia: using es6 import for electron + typescript 【发布时间】:2016-09-17 16:40:10 【问题描述】:我有一个在电子中运行的 aurelia 应用程序。我的源文件是打字稿,我有环境 typings 用于电子和节点。
因为我知道我正在编译用于电子,我正在将我的打字稿转换为 es6 并加载系统模块;这意味着我可以关闭 system.js 的转译器关闭。我正在使用 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 正确返回只有在电子本身中运行应用程序时才可用的“电子”模块?
【问题讨论】:
【参考方案1】:一个解决方案——希望有更好的方法——我想出的是为 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
作为最后的手段。
【讨论】:
看起来jspm的下一个版本会有更好的方法:github.com/jspm/jspm-cli/issues/1837以上是关于Aurelia:使用 es6 导入电子 + 打字稿的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Aurelia 和 typescript 获得业力覆盖?