2016-03-31 3 views
0

Я пишу электронное настольное приложение в TypScript. После компиляции, организация проекта выглядит следующим образом:Электрон и машинопись: Как правильно обрабатывать модули во время выполнения?

  • DIST
    • HTML
      • index.html
    • скрипты
      • ApplicationView.js
      • ApplicationViewModel.js

В index.html У меня есть этот скрипт тег:

<script src="../scripts/Application.js"></script> 

Все мои файлы компилируются из транскрипта ES2015 (таргетинг ES6 и с использованием модулей ES6) и transpiled от Babel до ES5. ApplicationView.ts выглядит следующим образом:

///<reference path="../../typings/main.d.ts" /> 

import * as $ from "jquery"; 
import * as ko from "knockout"; 
import ApplicationViewModel from "./ApplicationViewModel"; 

$(document).ready(() => { 
    ko.applyBindings(new ApplicationViewModel("Hello!")); 
}); 

Вот содержание ApplicationViewModel.ts:

import * as ko from "knockout"; 

export default class ApplicationViewModel { 
    public greeting: KnockoutObservable<string>; 

    constructor(greeting: string) { 
     this.greeting = ko.observable(greeting); 
    } 
} 

Electron выдает ошибку о том, что не может найти модуль ./ApplicationViewModel. Тем не менее, в консоли отладчика, я могу успешно импортировать модуль с:

require("../scripts/ApplicationViewModel"); 

Так, что не так очевидно. Тег скрипта эффективно копирует содержимое Application.js в файл HTML, изменяя контекст для относительного пути модуля. Мой вопрос: Что я должен делать?

Я видел использование require.js в теге скрипта. Но Electron работает на Node.js. Если это правильный способ справиться с моей проблемой, почему тогда мне нужен другой модуль-загрузчик? Как бы я удостоверился, что эти игры играют хорошо?

+0

Можете ли вы показать нам, что внутри 'ApplicationViewModel.js'? Довольно уверен, что это проблема с 'export default' или чем-то – KeitIG

+0

Я редактировал свой вопрос, чтобы включить содержимое этого файла. – Craxal

ответ

2

Фигурные его. Довольно просто. Я заменил <script> тег в HTML-файл с этим:

<script> 
    require("../scripts/ApplicationView"); 
</script> 

работает как шарм! Теперь мне просто нужно выяснить, почему JQuery работает неправильно ...

0

Вы смешивая ES5 и ES6 путей экспорта модулей:

module.exports = ApplicationViewModel; // ES5 
export default ApplicationViewModel; // ES6 
+0

Да, я нацелился на CommonJS. Пробовал переключиться на целевой ES6, но у меня такая же проблема. Не уверен, что я следую тому, что вы говорите, неправильно.Мой дескриптор целенаправленно нацелен на ES6, потому что я хочу использовать async/wait. Тогда Вавилон должен перевести это на ES5. Нигде я не использую экспорт стиля ES5 в фактическом исходном коде; это результат транспиляции. – Craxal

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