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 获得业力覆盖?

打字稿 + ES6 代理

在带有 loadClass 的打字稿中使用 es6 类和猫鼬

ES6 字符串文字/打字稿的 Chrome 开发工具问题

打字稿:如何根据对象键/值类型在 ES6 映射中创建条目

使用打字稿正确导入平面缓冲区