【问题标题】:Unexpected token < in Angular2 CLIAngular2 CLI中的意外令牌<
【发布时间】:2017-08-06 18:31:47
【问题描述】:

我已经构建了一个 Angular2 应用程序,它在我的工作和家庭计算机上都可以在本地运行,但是当我尝试将它推送到 Azure 时失败了!

ng build -prod 命令(内联、主、polyfills 和供应商)生成的所有 4 个 .js 文件都在控制台中报告错误:

Uncaught SyntaxError: Unexpected token

当我点击突出显示的行时,总是在我的 index.html 页面中:

<!DOCTYPE html>

我认为这是最新版本 CLI 中的错误或依赖问题,但我不知道从哪里开始,因为我无法在本地复制它,即使使用 ng serve -prod

我的 package.json 文件是:

{
  "name": "budget.front-end",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "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",
    "bootstrap": "^3.3.7",
    "core-js": "^2.4.1",
    "ng2-bootstrap": "^1.4.0",
    "rxjs": "^5.1.0",
    "zone.js": "^0.7.6",
    "angular2-jwt":"~0.1.28",
    "auth0-js": "^8.3.0",
    "auth0-lock": "^10.12.3",
    "chart.js": "^2.5.0",
    "ng2-charts": "^1.5.0",
    "@types/node": "^6.0.46"
  },
  "devDependencies": {
    "@angular/cli": "1.0.0-rc.2",
    "@angular/compiler-cli": "^2.4.0",
    "@types/jasmine": "2.5.38",
    "@types/node": "~6.0.60",
    "codelyzer": "~2.0.0",
    "jasmine-core": "~2.5.2",
    "jasmine-spec-reporter": "~3.2.0",
    "karma": "~1.4.1",
    "karma-chrome-launcher": "~2.0.0",
    "karma-cli": "~1.0.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "karma-coverage-istanbul-reporter": "^0.2.0",
    "protractor": "~5.1.0",
    "ts-node": "~2.0.0",
    "tslint": "~4.5.0",
    "typescript": "~2.0.0"
  }
}

我的系统是:

@angular/cli: 1.0.0-rc.2
node: 6.9.1
os: darwin x64
@angular/common: 2.4.9
@angular/compiler: 2.4.9
@angular/core: 2.4.9
@angular/forms: 2.4.9
@angular/http: 2.4.9
@angular/platform-browser: 2.4.9
@angular/platform-browser-dynamic: 2.4.9
@angular/router: 3.4.9
@angular/cli: 1.0.0-rc.2
@angular/compiler-cli: 2.4.9

用 index.html 更新

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Budget </title>
<base href="/">

<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="./assets/ice-cream.png">


<link rel="stylesheet" 
  href="https://unpkg.com/bootstrap@3.3.7/dist/css/bootstrap.min.css">

<script src="https://cdn.auth0.com/js/lock/10.12.3/lock.min.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js">        </script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.bundle.min.js"></script>

</head>
<body>
  <app-root>Loading...</app-root>
</body>
</html>

dist\index.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Budget </title>
  <base href="/">

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="./assets/ice-cream.png">


<link rel="stylesheet" 
      href="https://unpkg.com/bootstrap@3.3.7/dist/css/bootstrap.min.css">

    <script src="https://cdn.auth0.com/js/lock/10.12.3/lock.min.js"></script>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.bundle.min.js"></script>

<link href="styles.bd88389e6ebba2f4c82b.bundle.css" rel="stylesheet"/></head>
<body>
  <app-root>Loading...</app-root>
<script type="text/javascript" src="inline.176eda039efb277d0b1a.bundle.js"></script><script type="text/javascript" src="polyfills.f52c146b4f7d1751829e.bundle.js"></script><script type="text/javascript" src="vendor.02550e5852673137ddc8.bundle.js"></script><script type="text/javascript" src="main.d7e4099a93c3c9dc1bf6.bundle.js"></script></body>
</html>

这是我第一个使用 Angular 的应用程序,我只是不断地用一件事或另一件事碰到砖墙!

Web.config 文件,根据另一个问题添加以解决角度路由

<configuration>
    <system.webServer>
        <rewrite>
        <rules>
        <clear />

        <!-- ignore static files -->
        <rule name="AngularJS Conditions" stopProcessing="true">
        <match url="(app/.*|css/.*|fonts/.*|images/.*|js/.*|node_modules/.*)" />
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
        <action type="None" />
        </rule>

        <!-- check if its root url and navigate to default page -->
        <rule name="Index Request" enabled="true" stopProcessing="true">
        <match url="^$" />
        <action type="Redirect" url="/home" logRewrittenUrl="true" />
        </rule>

        <!--remaining all other url's point to index.html file -->
        <rule name="AngularJS Wildcard" enabled="true">
        <match url="(.*)" />
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
        <action type="Rewrite" url="index.html" />
        </rule>

        </rules>
        </rewrite>
    </system.webServer>
</configuration>

【问题讨论】:

  • 也请分享 index.html 代码
  • 刚刚添加,是为了包含它!
  • 这是 post-ng build (dist) index.html 文件吗? (看起来这是您的 src - cli 在 ng build 期间修改了您的 index.html 以包含应用程序依赖项。)
  • @SteveG。好点,问题已更新,谢谢
  • @SteveG。我认为它为 index.html 提供服务,我收到“正在加载应用程序”消息,但它遇到了 javascript 错误并且失败了。如果有帮助,我已经添加了控制台的屏幕截图?

标签: javascript angular azure angular-cli


【解决方案1】:

您的web.config 的 URL 重写部分似乎有问题。它会将这些文件作为您的 index.html 页面返回。

尝试用与此类似的内容替换您的重写部分以测试理论:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="AngularJS" stopProcessing="true">
          <match url="^(?!.*(.bundle.js|.bundle.map|.bundle.js.gz|.bundle.css|.bundle.css.gz|.png|.jpg|.ico)).*$" />
          <conditions logicalGrouping="MatchAll">
          </conditions>
          <action type="Rewrite" url="/"  appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

这基本上使用正则表达式将所有请求路由回 index.html(或根,如果您愿意),除了我正在使用的静态资源(.js、.css、.png 等)

旁注:如果您还在同一个域上托管 .Net 应用程序,您可能需要修改 .Net 应用程序的路由配置或深度链接到您的 Angular 应用程序去上班了。

您有几个选择,但由于我不知道您的要求,所以我不能推荐其中一个。你可以:

如果不需要 .Net 应用:

  1. 完全删除 .Net 应用,仅在您的 Azure 站点上托管静态文件,或者:
  2. 修改您的 Azure 站点应用程序的 [.Net] 路由配置以将所有控制器请求重定向到您的主控制器。 (IMO 并不是您最好的选择。)

【讨论】:

  • 您好,我尝试了此代码,但收到“无法显示页面,因为发生了内部服务器错误。”所以进步!
  • 部署成功了,所以我猜现在更多的是运行时错误?
  • 不,我不知道,这个应用程序的后端位于不同的 URL BackEndApp.Azure 而不是 FrontendApp.Azure。还有其他地方可以排除吗?
  • 这是我在 Azure 中遇到的错误:当读取 Web 服务器或 Web 应用程序的配置文件时出现问题时会发生此错误。在某些情况下,事件日志可能包含有关导致此错误的原因的更多信息。
  • 好主意,但我没有代表!
【解决方案2】:

这是由于在您的 index.html 文件未指向的 dist 文件夹中创建项目目录。 通过将 index.html 文件中的基本标记从 &lt;base href="/"&gt; 更改为 &lt;base href="/project-app/"&gt; 来修复它。

【讨论】:

    猜你喜欢
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多