ОШИБКА в [at-loader] node_modules\@types\jasmine

Моя сборка webpack начала сбой из ниоткуда без обновления пакетов. Я предполагаю, что какое-то незначительное обновление версии вызвало это, но не может понять, как обойти его. Кто-нибудь знает, что делать?

ERROR in [at-loader] node_modules\@types\jasmine\index.d.ts:39:52 
    TS1005: '=' expected.
ERROR in [at-loader] node_modules\@types\jasmine\index.d.ts:39:38 
    TS2371: A parameter initializer is only allowed in a function or constructor implementation.
ERROR in [at-loader] node_modules\@types\jasmine\index.d.ts:39:46 
    TS2304: Cannot find name 'keyof'.

package.json

  "dependencies": {
    "@angular/common": "2.4.7",
    "@angular/compiler": "~2.4.4",
    "@angular/core": "2.4.7",
    "@angular/forms": "2.4.7",
    "@angular/http": "~2.4.4",
    "@angular/material": "^2.0.0-beta.1",
    "@angular/platform-browser": "~2.4.4",
    "@angular/platform-browser-dynamic": "~2.4.4",
    "@angular/platform-server": "~2.4.4",
    "@angular/router": "~3.4.1",
    "@angularclass/conventions-loader": "^1.0.2",
    "@angularclass/hmr": "~1.2.2",
    "@angularclass/hmr-loader": "~3.0.2",
    "@vaadin/angular2-polymer": "^1.0.0",
    "animate.css": "^3.5.2",
    "assets-webpack-plugin": "^3.4.0",
    "bootstrap-sass": "^3.3.7",
    "bootstrap-select": "^1.12.1",
    "bootstrap-tour": "^0.11.0",
    "core-js": "^2.4.1",
    "font-awesome": "^4.7.0",
    "http-server": "^0.9.0",
    "icheck": "^1.0.2",
    "ie-shim": "^0.1.0",
    "jasmine-core": "^2.5.2",
    "metismenu": "2.0.2",
    "nestable": "^0.2.0",
    "ng2-modal": "0.0.24",
    "ng2-tag-input": "~0.8.4",
    "pace": "0.0.4",
    "pace-progress": "^1.0.2",
    "primeng": "^1.1.4",
    "reflect-metadata": "^0.1.9",
    "rxjs": "~5.1.0",
    "summernote": "^0.8.2",
    "zone.js": "0.7.4",
    "ag-grid": "~8.0.1",
    "ag-grid-enterprise": "~8.0.1",
    "ag-grid-ng2": "~8.0.0"
  },
  "devDependencies": {
    "@angular/compiler-cli": "~2.4.1",
    "@types/hammerjs": "^2.0.33",
    "@types/jasmine": "^2.2.34",
    "@types/node": "^6.0.38",
    "@types/selenium-webdriver": "2.53.38",
    "@types/source-map": "^0.5.0",
    "@types/uglify-js": "^2.0.27",
    "@types/webpack": "^2.0.0",
    "angular-router-loader": "^0.4.0",
    "angular2-template-loader": "^0.6.0",
    "assets-webpack-plugin": "^3.4.0",
    "awesome-typescript-loader": "~3.0.4-rc.2",
    "codelyzer": "~2.0.0-beta.4",
    "copy-webpack-plugin": "^4.0.0",
    "css-loader": "^0.26.0",
    "exports-loader": "^0.6.3",
    "expose-loader": "^0.7.1",
    "extract-text-webpack-plugin": "^2.0.0-beta.4",
    "file-loader": "^0.9.0",
    "gh-pages": "^0.12.0",
    "html-webpack-plugin": "^2.21.0",
    "imports-loader": "^0.7.0",
    "istanbul-instrumenter-loader": "1.2.0",
    "jasmine-core": "^2.5.2",
    "json-loader": "^0.5.4",
    "karma": "^1.2.0",
    "karma-chrome-launcher": "^2.0.0",
    "karma-coverage": "^1.1.1",
    "karma-jasmine": "^1.0.2",
    "karma-mocha-reporter": "^2.0.0",
    "karma-remap-coverage": "^0.1.4",
    "karma-sourcemap-loader": "^0.3.7",
    "karma-webpack": "1.8.1",
    "ngc-webpack": "^1.0.2",
    "node-sass": "^4.1.1",
    "npm-run-all": "^4.0.0",
    "parse5": "^3.0.1",
    "protractor": "^4.0.10",
    "raw-loader": "0.5.1",
    "rimraf": "~2.5.4",
    "sass-loader": "^4.1.1",
    "script-ext-html-webpack-plugin": "^1.3.2",
    "source-map-loader": "^0.1.5",
    "string-replace-loader": "1.0.5",
    "style-loader": "^0.13.1",
    "to-string-loader": "^1.1.4",
    "ts-helpers": "1.1.2",
    "ts-node": "^2.0.0",
    "tslint": "4.2.0",
    "tslint-loader": "^3.3.0", 
    "typedoc": "^0.5.3",
    "typescript": "2.0.10",
    "url-loader": "^0.5.7",
    "v8-lazy-parse-webpack-plugin": "^0.3.0",
    "webpack": "2.2.1",
    "webpack-dev-middleware": "^1.10.0",
    "webpack-dev-server": "2.3.0",
    "webpack-dll-bundles-plugin": "^1.0.0-beta.5",
    "webpack-md5-hash": "^0.0.5",
    "webpack-merge": "~2.6.1"
  }

Ответы

Ответ 1

Похоже, ваша библиотека @types/jasmine была обновлена ​​до последней версии, так как у вас есть символ каретки:

"@types/jasmine": "^2.2.34",

В последней версии есть проблемы, о которых говорит ошибка. Поэтому попробуйте сейчас, установив версию в 2.5.41 в свой пакет package.json:

"devDependencies": {
  "@types/jasmine": "2.5.41"
}

Возможно, вам нужно удалить папку node-modules и запустить npm install для чистой установки.

Ответ 2

Если вы не используете Angular 2, обновите свой TypeScript до версии 2.1.6 или выше, пожалуйста. Это должно помочь.

Согласно это обсуждение, более правильным решением является сохранение TypeScript до последней стабильной младшей версии ветвления 2.x, что на данный момент составляет 2.1.6 (12 февраля 2017 г.). Ошибка в журнале сборки указывает, что вы используете устаревшую версию 2.0.10. В последнем файле определения jasmine имеется новая проверка синтаксиса в функции spyOn(), доступная только для TypeScript >=2.1.0. Как правило, у вас не должно быть серьезных оснований придерживаться 2.0.10, поэтому, пожалуйста, обновите. Однако, если есть проблема с обратной совместимостью, которая препятствует вам обновлению, вы должны заполнить форму выпуска здесь: https://github.com/Microsoft/TypeScript/issues и сделать компилятор команда знает об ошибке.

UPD. Избегайте в строках package.json, таких как: "typescript": "2.0.10, "typescript": "~2.0.0". Вместо ~ вы должны применить ограничение ^ (позволяет обновлять номера младших версий, а не только исправления), например "typescript": ^2.0.0".

Надеюсь, что это поможет. Извините за неудобства.

Ответ 3

Даже с Angular 2+ у меня была эта проблема. То, что решило проблему для меня, вместо понижения Jasmine обновляло Typescript.

Мои шаги:

  • Измените package.json, чтобы указать на новую версию typescript
    • "typescript": "~2.0.9""typescript": "^2.0.9"
  • Запустить npm install
  • После этого ошибка исчезла.