tsconfig compilerOptions“module”:“system”无法正常工作

时间:2016-02-06 16:42:38

标签: node.js module typescript angular systemjs

在angular2 5分钟教程中,他们使用“system”作为tsconfig中的模块。我有systemjs作为node_module但是当我尝试启动我的服务器时,我从编译js文件的第一行得到System is not defined,如下所示: System.register(['http', 'express', './config/index', 'path'], function(exports_1) {

为什么System未定义,即使我将其作为节点依赖项?

我试图将其更改为commonjs,然后编译的js看起来更简单。但是后来我在角度应用中遇到了错误。

为了让它与SystemJs一起使用,我缺少什么?

修改

我认为我不善于解释我的问题。从导入模块更改为我的server.ts文件“javascript style”(var http = require('http');)到我猜“typescript style”(import * as http from 'http';)我开始得到上面指定的错误。在使用javascript样式时,编译的js看起来与ts(var http = require('http');)相同,但是在执行“typescript style”时,它会使用System(上面指定的代码行)导入模块进行编译。所以我在尝试启动节点服务器而不是浏览器时遇到此错误。

我尝试在tsconfig.json中将compilerOption“module”更改为“commonjs”而不是“system”,这样做会导致浏览器出错(this error,只有解决方案似乎不适合)一些奇怪的原因所以我想我会尝试“系统”。但后来我遇到了没有定义System的问题。那么在启动节点服务器时如何访问System?

1 个答案:

答案 0 :(得分:2)

您的index.html中缺少对system.js的引用。 Angular意味着由浏览器运行,因此它不足以将其作为节点依赖项,浏览器不会自动加载它。当然不要尝试在node.js的服务器端运行角度应用程序。你想在服务器端(node.js)做的是运行一些Web服务器,它将向浏览器提供内容(http-server,lite-server等)。然后在浏览器中打开由web服务器提供的index.html,然后使用system.js运行angular2应用程序以进行模块加载。

如果你确实在index.html中引用了system.js而你没有尝试在node.js服务器端运行它 - 通过使用任何现代浏览器的开发工具确保路径是正确的并且它确实被加载了