当脚本由system.js加载时,如何要求('electron')

How to require('electron') when script is loaded by system.js

本文关键字:electron system 脚本 js 加载      更新时间:2023-09-26

我正试图在电子应用程序中使用Aurelia和SystemJs;

我有一个相当基本的app-window.js:

const remote = require('electron').remote;
document.getElementById("close-btn").addEventListener("click", function (e) {
  var window = remote.getCurrentWindow();
  window.close();
});
...

如果我将它作为普通的html脚本(<script src="app-window.js"></script>)使用,它会非常好地工作。

但是,如果我有systemJS导入它:

<script>
    System.import('app-window.js');
</script>

我得到错误:

system.js:4 GETfile:///D:/Code/aurelia-electronic-typescript/output/electro.jsnet::ERR_FILE_NOT_FOUND

此外,我在配置中也设置了transpiler: false

不幸的是,我想吃蛋糕,因为我想把Aurelia的依赖性注入和电子的远程功能结合起来。

有没有办法让system.js不干涉电子的require

经过快速实验。。。如果脚本显式加载System,它就会神奇地工作:

打字脚本:

export class AppWindow
{  
  constructor()
  {
    var remote = require('electron').remote;
    document.getElementById("close-btn").addEventListener("click", function (e) {
      var window: Electron.BrowserWindow = remote.getCurrentWindow();
      window.close();
    });
  }
}
var appWindow:AppWindow = new AppWindow()

当编译为〔es6,系统〕时:

System.register([], function(exports_1, context_1) {
    "use strict";
    var __moduleName = context_1 && context_1.id;
    var AppWindow, appWindow;
    return {
        setters:[],
        execute: function() {
            class AppWindow {
                constructor() {
                    var remote = require('electron').remote;
    ...

工作非常好。