【发布时间】:2016-03-27 11:39:25
【问题描述】:
假设我有一个 foo.ts 和 app.ts 如下:
foo.ts:
export interface Foo {
id: number;
label: string;
};
app.ts:
import {Foo} from './foo'
var myfoo: Foo = { "id": 1, "label": "One" };
console.log(JSON.stringify(myfoo));
编译后,如果我在tsconfig.json 中使用"module"="commonjs",则从命令行执行'node app.js' 会按预期运行。切入正题,我想做的是将我的Foo 接口客户端与Angular 2 一起使用,服务器端与节点一起使用。不方便的是,我在 here 上建模的 Angular 2 快速入门在 tsconfig.json 中需要 "module"="system"。此配置在尝试运行'node app.js' 时会导致错误:
System.register([], function(exports_1) {
^
ReferenceError: System is not defined`
我已经尝试按照在github 上使用带有节点的 systemjs 的说明进行操作,但此时我只是在捣碎键并且可以使用一些帮助。如何 (a) 使用 systemjs 在服务器端运行我的 app.ts 代码,或者 (b) 使用 commonjs 运行 Angular 2 快速入门?
【问题讨论】:
-
您确定在您的 html 中包含“system.js”吗?检查您的开发工具以确保所有 javascript 文件都已加载。
-
这是服务器端的node.js,从命令行运行。客户端使用 system.js 和 Angular 2 快速入门教程运行良好。除了像教程中那样使用 lite-server 之外,我使用 Node (+Express) 来提供页面(+web 服务)。但我无法让“系统”处理想要共享接口 Foo 的服务器打字稿代码。我正在寻找的是一个简单的打字稿服务器端节点示例,它使用“system”而不是“commonjs”。
-
明确地说,如果我用 ES5 和传统的 javascript 编写服务器端,一切正常。但是我在尝试使用 tsc -p 在客户端和服务器上共享打字稿代码时碰壁了。在整个客户端和服务器项目上。
-
我所做的是使用 gulp 将 ts 转换为 js(使用 CommonJS), tsd (
tsd install node express) 用于“打字”,然后运行节点。没有所有代码,很难看出你的问题。 -
问题在于两个模块加载目标(system vs commonjs)。是的,解决方案似乎是为服务器和客户端使用不同的目标,由 Gulp 管理。我希望有一种方法可以在从命令行启动的服务器代码以及客户端上使用系统,如 Angular 2 快速入门教程中所示。这样我就可以在整个项目中使用 tsc -p 。所有代码都在 OP 中。但似乎这是不可能的,或者没有人关心,因为每个人都在使用 Gulp。
标签: node.js typescript angular commonjs systemjs