【发布时间】:2016-07-19 09:30:23
【问题描述】:
我正在用 Typescript 编写一个 Electron 桌面应用程序。编译后项目组织如下:
- 分布
- html
- index.html
- 脚本
- ApplicationView.js
- ApplicationViewModel.js
- html
在index.html我有这个脚本标签:
<script src="../scripts/Application.js"></script>
我所有的文件都是从 Typescript 编译到 ES2015(针对 ES6 并使用 ES6 模块)并由 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");
所以,问题是显而易见的。 script 标签有效地将Application.js 的内容复制到HTML 文件中,从而更改模块相对路径的上下文。我的问题是我真的应该做什么?
我在脚本标签中看到了require.js 的使用。但是 Electron 在 Node.js 上运行。如果这是处理我的问题的正确方法,那我为什么需要另一个模块加载器?怎样才能保证两人打得不错?
【问题讨论】:
-
你能告诉我们
ApplicationViewModel.js里面有什么吗?很确定这是export default或其他什么的问题 -
我已经编辑了我的问题以包含该文件的内容。
标签: javascript typescript ecmascript-6 electron