【问题标题】:SyntaxError: Unexpected token 'const' for testing.es5.jsSyntaxError:testing.es5.js 的意外标记“const”
【发布时间】:2017-02-28 16:07:37
【问题描述】:

我已切换到 Angular4.0.0-rc.1 并且 看起来 ES5 测试包包含 ES2015 代码。

我收到此错误:

PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  SyntaxError: Unexpected token 'const'
    at webpack:///~/@angular/core/@angular/core/testing.es5.js:10:0 <- src/test.ts:16345

还在 Angular repo 上找到 related issue

【问题讨论】:

  • 你在使用 angular cli 吗?如果有,是哪个版本?
  • @angular/cli: 1.0.0-rc.1 节点:6.9.4 操作系统:darwin x64

标签: angular4


【解决方案1】:

在我的例子中,更新 karma.config.js 以使用 PhantomJS 启动器后测试失败。

为了对问题进行排序,更新了 src/tsconfig.spec.json 以使用 ES5 而不是 ES6。

{
    ...
    "target": "es5",
    ...
}

【讨论】:

    【解决方案2】:

    我刚刚创建了一个基本的 Angular 项目,并且在 PhantomJS 集成方面遇到了相同(或类似)的问题。

    PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
      SyntaxError: Unexpected token 'const'
      at webpack:///src/app/app.component.ts:1:0 <- src/test.ts:63184
    

    我们的团队开始使用它,这是我们在文档中投入的内容:

    PhantomJS 是一个无头(又名无 GUI)浏览器,可用于自动化测试。 目前,PhantomJS 有一个限制,它只支持ES5 standard

    1. npm install -g phantomjs-prebuilt
    2. npm install --save-dev karma-phantomjs-launcher
      • 在 karma.conf.js 中
        1. 在插件部分添加require('karma-phantomjs-launcher')
        2. 在浏览器中添加PhantomJS
    3. npm install --save intl
      • 在 src/polyfill.ts 中
        1. 添加import 'intl';(在底部取消注释)
        2. import "core-js/client/shim"; 添加到 Evergreen 要求部分
    4. 在 src/tsconfig.spec.json 中(或任何用于测试的 typescript 配置)
      • 将目标设置为es5

    假设一切顺利,测试应该可以工作。

    关于如何触发测试运行的一些示例:

    • ng test --browsers PhantomJS --singleRun true
    • ./node_modules/karma/bin/karma start ./karma.conf.js --browsers PhantomJS --singleRun true

    【讨论】:

    • 我已经尝试了所有可能的解决方案来解决这个问题,但仍然出现错误。
    • 自从我在 2 年前做出回应以来,我猜测它与 AngularJS 的较新版本是一个不同的问题。 (这是基于 4.0.0-rc.1)
    【解决方案3】:

    当您使用 @angular/cli: 1.0.0-rc.1 时,我认为您的 tsconfig.json 看起来像这样:

    {
      "compileOnSave": false,
      "compilerOptions": {
        ...
        "target": "es5",
        "module": "es2015",
        "lib": [
          "es2016",
          "dom"
        ]
      }
    }
    

    您的 E2E 文件夹中还应该有一个 tsconfig.e2e.json

    {
      "extends": "../tsconfig.json",
      "compilerOptions": {
        "outDir": "../dist/out-tsc-e2e",
        "module": "commonjs",
        "target": "es6",
        "types":[
          "jasmine",
          "node"
        ]
      }
    }
    

    只需删除 "target": "es6" 行,因为此文件扩展了前一个文件,您最终将在 ES5 中编译您的应用程序。

    它应该在那之后工作。

    【讨论】:

      【解决方案4】:

      在我的情况下,这是由于 webpack 不太喜欢的恶意导入,或者说不知道如何处理它:

      import {HttpClient} from "selenium-webdriver/http";
      

      用正确的 HttpClient(我们自己的)替换解决了这个问题。问题是 JS 文件实际上是指“const”关键字,但我认为这是 ES6 保留字而不是 ES5 保留字,因此我们的错误。 如果你得到类似的东西,那么你指的是向下编译器没有发现你想要任何转换的库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-06
        • 1970-01-01
        • 2021-03-10
        • 1970-01-01
        • 1970-01-01
        • 2020-09-28
        • 2018-08-02
        • 2020-10-03
        相关资源
        最近更新 更多