2016-03-26 18 views
2

Elektron BrowserWindow'a yüklediğim bir angular2/typescript uygulamasına sahibim. Bunun için modüller SystemJS ile yüklenir. Ancak, elektron ile çalıştırdığımda, SystemJS yükleyicisinden, elektron modülünü dosya sisteminden yüklemeye çalıştığı bir hata alıyorum. Elektron modülünü bulabilmesi için SystemJS'de yapılandırmak istediğim gibi herhangi bir öneri var mı? Elektron-prebuilt ile eşlemek için herhangi bir js görmedim.elektron modüllerini BrowserWindow sayfasından alamıyor

Güncelleştirme main.js içeriği ve hata izi eklendi. Kodumu başlatmak için maxogden'in menubar kullanıyorum. Böylece ana işlem Javascript'ten geliyor ve BrowserWindow'da yüklü olan sayfa TypeScript'te.


index.html

<html> 
<head> 
<title>IR Toolbox</title> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<link rel="stylesheet" href="lib/ng2-material/dist/ng2-material.css"> 
<link rel="stylesheet" href="lib/ng2-material/dist/font.css"> 

<!-- 1. Load libraries --> 
<script src="lib/angular2-polyfills.js"></script> 
<script src="lib/system.src.js"></script> 
<script src="lib/Rx.js"></script> 
<script src="lib/angular2.dev.js"></script> 
<script src="lib/router.dev.js"></script> 
<script src="lib/http.dev.js"></script> 

<!-- 2. Configure SystemJS --> 
<script> 
    System.config({ 
    map: { 
     'ng2-material': './lib/ng2-material' 
    }, 
    packages: { 
     app: { 
     format: 'register', 
     defaultExtension: 'js', 
     }, 
     'ng2-material': { 
     defaultExtension: 'js' 
     } 
    } 
    }); 
    System.import('app/main') 
     .then(null, console.error.bind(console)); 
</script> 
</head> 

<!-- 3. Display the application --> 
<body> 
    <app>Loading...</app> 
</body> 
</html> 

electron.service.ts

Söz konusu modül typescript derleyici ile iyi derler.

import {Injectable} from 'angular2/core'; 
import {ipcRenderer} from 'electron'; 

@Injectable() 
export class ElectronService { 
    quit() { 
    ipcRenderer.send('mb-app', 'quit'); 
    } 
} 

main.js

const ipcMain = require('electron').ipcMain; 
const menubar = require('menubar'); 

const appPath = __dirname; 

const config = { 
    openDevTools: true, 
    title: 'Toolbox' 
}; 

const mb = menubar({ 
    dir: appPath, 
    index: appPath + "/index.html", 
}); 

if (config.openDevTools) { 
    mb.on('after-create-window',() => { 
    mb.window.openDevTools(); 
    }); 
} 

// Quit when all windows are closed. 
mb.app.on('window-all-closed',() => { 
    if (process.platform != 'darwin') { 
    mb.app.quit(); 
    } 
}); 

// This method will be called when Electron has finished 
// initialization and is ready to create browser windows. 
mb.app.on('ready',() => { 
    mb.tray.setToolTip(config.title); 

    mb.app.allowNTLMCredentialsForAllDomains(true); 

    ipcMain.on('mb-app', (event, arg) => { 
    if (arg === "quit") { 
     console.log('goodbye!'); 
     mb.app.quit(); 
    } 
    }); 
}); 

Hata İz

GET file:///D:/projects/electron/ir-toolbox/dist/electron net::ERR_FILE_NOT_FOUND 
    fetchTextFromURL @ system.src.js:1085 
    (anonymous function) @ system.src.js:1646Z 
    oneAwarePromise @ angular2-polyfills.js:580 
    (anonymous function) @ system.src.js:1645 
    (anonymous function) @ system.src.js:2667 
    (anonymous function) @ system.src.js:3239 
    (anonymous function) @ system.src.js:3506 
    (anonymous function) @ system.src.js:3888 
    (anonymous function) @ system.src.js:4347 
    (anonymous function) @ system.src.js:4599 
    (anonymous function) @ system.src.js:337 
    ZoneDelegate.invoke @ angular2-polyfills.js:322Z 
    one.run @ angular2-polyfills.js:218 
    (anonymous function) @ angular2-polyfills.js:567 
    ZoneDelegate.invokeTask @ angular2-polyfills.js:355Z 
    one.runTask @ angular2-polyfills.js:254 
    drainMicroTaskQueue @ angular2-polyfills.js:473 
angular2-polyfills.js:322 Error: Error: XHR error loading file:///D:/projects/electron/ir-toolbox/dist/electron(…)ZoneDelegate.invoke @ angular2-polyfills.js:322Z 
    one.run @ angular2-polyfills.js:218 
    (anonymous function) @ angular2-polyfills.js:567 
    ZoneDelegate.invokeTask @ angular2-polyfills.js:355 
    Zone.runTask @ angular2-polyfills.js:254 
    drainMicroTaskQueue @ angular2-polyfills.js:473 
    ZoneTask.invoke @ angular2-polyfills.js:425 
+0

Ana modülünüzün içeriğini ve tam hata iletisini verebilir misiniz? Teşekkürler! –

+0

Aslında bu nedenle Angular 2 Electron app için TypeScript'i bıraktım. Ama bunun sizin için bir seçenek olmadığını anladım. – Teak

+0

@Teak Bu, üzerinde çalıştığım bir kavram kanıtıdır, ben de angular2 ile çalışmayı denemeye çalışıyorum. Daha fazla öğrenme alıştırması. Teşekkürler. –

cevap

0

Ben çalıştırarak çözümü etrafında çalıştı Ana işlemden ExpressJS, XHR yoluyla renderer işleminde çalışan koddan iletişim kurabilir. Şimdi, renderer işleminin doğrudan elektron modülüne erişmesi gerekmiyor.