【问题标题】:tsconfig compilerOptions "module": "system" not workingtsconfig compilerOptions "module": "system" 不工作
【发布时间】:2016-05-16 13:47:47
【问题描述】:

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

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

我试图将其更改为commonjs,然后编译的js看起来要简单得多。但后来我在 Angular 应用程序中遇到错误。

为了让它与 SystemJs 一起工作,我缺少什么?

编辑

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

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

【问题讨论】:

  • 您是否已将其包含在您的 index.html 中?
  • 是的,但我在尝试运行节点服务器时收到此错误

标签: node.js module typescript angular systemjs


【解决方案1】:

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

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

【讨论】:

  • 查看我的编辑。由于此错误,我无法启动节点服务器。 systemjs 在浏览器中运行良好
  • System.js 可以毫无问题地处理 commonjs 格式的模块。所以你可以坚持使用commonjs。关于您提到的错误 - 您是否在 index.html 中链接了所有库/垫片,与 5min 教程中建议的完全一样?我还假设您尝试使用最新的 chrome 运行它只是为了验证它不是遗留问题。
  • 是的,我认为更改为 commonjs 会改变我的角度组件的结构,这就是该部分不起作用的原因。在 5 分钟的教程之后,您应该使用 systemjs 来处理模块和引导。问题是当我设置“系统”时,我的节点服务器打字稿文件也被编译为“系统”风格,我得到了我的错误,因为没有系统运行节点服务器。我的问题基本上是这样的。为什么我在运行节点服务器时没有定义系统?我如何得到它?所有与浏览器相关的东西似乎都不相关..
  • 你为什么期望 node.js 使用 System.js 模块加载器来加载模块?它有自己的使用“require”函数加载模块的方式。因此,所有试图通过任何其他方式加载模块的 javascript 在 node,js 服务器环境中都会失败。有关在 node.js 中加载模块的信息,请参见此处:nodejs.org/api/modules.html
  • 在 tsconfig 中指定要编译我的打字稿的模块时,我选择“系统”,因为这是教程中使用的。当我的节点服务器被编译时,使用相同的 tsconfig 并且所有模块导入都被编译为使用 system.你能改变 typescript 项目不同部分使用的模块系统吗?
猜你喜欢
  • 2017-08-14
  • 2020-08-04
  • 2020-07-07
  • 1970-01-01
  • 2016-04-01
  • 2018-06-16
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
相关资源
最近更新 更多