角度升级指南。 (SystemJS) 意外的令牌 <

Posted

技术标签:

【中文标题】角度升级指南。 (SystemJS) 意外的令牌 <【英文标题】:Angular upgrade guide. (SystemJS) Unexpected token < 【发布时间】:2017-06-30 08:47:52 【问题描述】:

每个人。 我正在尝试将编写在角度 1 上的大型应用程序升级到角度 2。作为第一步,它尝试使用 official guide 创建混合角度 1/2 应用程序。

当所有指令完成后我得到一个错误

Unhandled Promise rejection: (SystemJS) Unexpected token <
SyntaxError: Unexpected token <
    at eval (<anonymous>)
    at ZoneDelegate.invoke (http://localhost:8000/node_modules/zone.js/dist/zone.js:242:26)
    at Zone.run (http://localhost:8000/node_modules/zone.js/dist/zone.js:113:43)
    at http://localhost:8000/node_modules/zone.js/dist/zone.js:535:57
    at ZoneDelegate.invokeTask (http://localhost:8000/node_modules/zone.js/dist/zone.js:275:35)
    at Zone.runTask (http://localhost:8000/node_modules/zone.js/dist/zone.js:151:47)
    at drainMicroTaskQueue (http://localhost:8000/node_modules/zone.js/dist/zone.js:433:35)
    at XMLHttpRequest.ZoneTask.invoke (http://localhost:8000/node_modules/zone.js/dist/zone.js:349:25)
Evaluating http://localhost:8000/app
Error loading http://localhost:8000/app ; Zone: <root> ; Task: Promise.then ; Value: 

我的systemjs.config.js

(function (global) 
  System.config(
    paths: 
      // paths serve as alias
      'npm:': '/node_modules/'
    ,
    // map tells the System loader where to look for things
    map: 
      // our app is within the app folder
      app: '/app',

      // angular bundles
      '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
      '@angular/common': 'npm:@angular/common/bundles/common.umd.js',
      '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
      '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
      '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
      '@angular/http': 'npm:@angular/http/bundles/http.umd.js',
      '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
      '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
      '@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js',

      // other libraries
      'rxjs':                      'npm:rxjs',
      'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js'
    ,
    // packages tells the System loader how to load when no filename and/or no extension
    packages: 
      app: 
        defaultExtension: 'js'
      ,
      rxjs: 
        defaultExtension: 'js'
      
    
  );
)(this);

我在 package.config 中的依赖项

"dependencies": 
    "@angular/common": "~2.4.0",
    "@angular/compiler": "~2.4.0",
    "@angular/core": "~2.4.0",
    "@angular/forms": "~2.4.0",
    "@angular/http": "~2.4.0",
    "@angular/platform-browser": "~2.4.0",
    "@angular/platform-browser-dynamic": "~2.4.0",
    "@angular/router": "~3.4.0",
    "@angular/upgrade": "~2.4.0",

    "angular-in-memory-web-api": "~0.2.4",
    "systemjs": "0.19.40",
    "core-js": "^2.4.1",
    "rxjs": "5.0.1",
    "zone.js": "^0.7.4"
  ,

有人可以帮我解决这个问题吗?

【问题讨论】:

你的代码中有api请求吗?查看网络选项卡以检查 api 请求是否失败。当 api 未发送有效数据时,我大多在开发过程中遇到此错误。 是的,你是对的。当zone.js 响应http://localhost:8000/app 时出现错误。服务器返回文件夹结构。但我不知道如何解决它。 那么,您能否在 api 请求中添加响应以及预期响应和其他相关内容? 请求由zone.js 库发送,问题是我现在没有预期的响应。我认为这是错误的 url,因为它是一个没有服务器端的单页应用程序。来自url 的回复是&lt;html&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;meta name="viewport" content="width=device-width"&gt; &lt;title&gt;Index of /app/&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt;Index of /app/&lt;/h1&gt; &lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;(drwxr-xr-x)&lt;/code&gt;&lt;/td&gt;&lt;td style="text-align: right; padding-left: 1em"&gt;&lt;code&gt;&lt;/code&gt;&lt;/td&gt;&lt;td style="padding-left: 1em"&gt;&lt;a href="/app/../"&gt;..... 是否有任何更新,面临同样的问题,从 angularjs 1 升级到 angular 5? 【参考方案1】:

发生这种情况是因为缺少 app/main.js 文件。

http-server 正在返回与index.html 等效的 HTML,因为没有要返回的文件。这不是 zone.js 所期望的 UMD 模块,因此我们遇到了解析错误。

您将需要忽略此错误并继续使用官方指南。

【讨论】:

【参考方案2】:

您应该通过添加应用程序的主入口点来解决此问题。

packages: 
  app: 
    main: 'main.js',
    defaultExtension: 'js',
  ,
  rxjs: 
    defaultExtension: 'js'
  

【讨论】:

以上是关于角度升级指南。 (SystemJS) 意外的令牌 <的主要内容,如果未能解决你的问题,请参考以下文章

html 与systemjs的角度混合

Vue/Typescript/Jest - Jest 单元测试语法错误:意外的令牌导入

意外的标记。构造函数、方法、访问器或属性应为角度 5

Jest 遇到了带有 react-native 的意外令牌

SyntaxError: 尝试使用 @babel/register 时意外的令牌导出

Vue-loader 语法错误:从 js 文件导入组件时出现意外的令牌