2016-03-26 3 views
2

У меня есть приложение углового2/машинописного текста, которое загружается в электронный браузер BrowserWindow. Модули для этого загружаются через SystemJS. Но, когда я запускаю его с помощью запуска электрона, я получаю сообщение об ошибке от загрузчика SystemJS, где он пытается загрузить электронный модуль из файловой системы. Есть ли у кого-нибудь рекомендации, какие мне нужно настроить в SystemJS, чтобы отобразить его таким образом, чтобы он мог найти электронный модуль? Я не видел, чтобы какие-либо js отображались в электронном виде.не может импортировать электронные модули со страницы BrowserWindow

Обновление Добавлен контент main.js и трассировка ошибок. Я использую maxogden's menubar для запуска моего кода. Таким образом, основной процесс исходит от Javascript, а страница, загружаемая в BrowserWindow, находится в TypeScript.


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

Модуль в вопросе компилируется нормально с машинописи компилятором.

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(); 
    } 
    }); 
}); 

Трассировка Ошибка

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

Не могли бы вы предоставить содержание своего основного модуля и точное сообщение об ошибке? Благодаря! –

+0

Я фактически сбросил TypeScript для своего приложения Angular 2 Electron по этой причине. Хотя я понимаю, что это не вариант для вас. – Teak

+0

@Teak Это доказательство концепции, над которой я работаю, поэтому я пытаюсь заставить ее работать с угловым2. Больше как учебное упражнение. Благодарю. –

ответ

0

Я работал вокруг решения, запустив ExpressJS из основного процесса для обработки связи с кодом, выполняемым в процессе рендеринга через XHR. Таким образом, теперь процесс визуализации никогда не нуждается в непосредственном доступе к электронному модулю.

Смежные вопросы