【问题标题】:Aurelia: using es6 import for electron + typescriptAurelia:使用 es6 导入电子 + 打字稿
【发布时间】: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 正确返回只有在电子本身中运行应用程序时才可用的“电子”模块?

【问题讨论】:

    标签: electron aurelia systemjs jspm


    【解决方案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 作为最后的手段。

    【讨论】:

    猜你喜欢
    • 2017-03-16
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 2017-02-02
    • 2022-11-05
    • 1970-01-01
    • 2020-04-19
    • 2023-02-09
    相关资源
    最近更新 更多