升级到Angular 6后,npm install出错

时间:2018-05-04 15:40:52

标签: angular

我使用ng upgrade Angular 5 更新为 Angular 6 ,并发生以下错误。我删除了node_modulespackage-lock.json并再次执行了npm install,但错误是相同的:

TypeError: ts.formatting.RulesProvider is not a constructor
    at getRuleProvider (C:\Users\MarçalGómez\Documents\WebApp\node_modules\typescript-formatter\lib\formatter.ts:22:28)
    at Object.format [as default] (C:\Users\MarçalGómez\Documents\WebApp\node_modules\typescript-formatter\lib\formatter.ts:14:67)
    at C:\Users\MarçalGómez\Documents\WebApp\node_modules\typescript-formatter\lib\index.ts:172:42
    at <anonymous>
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! default@0.0.0 tsformat: `tsfmt -r`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the default@0.0.0 tsformat script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\MarçalGómez\AppData\Roaming\npm-cache\_logs\2018-05-04T15_27_51_987Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! default@0.0.0 postinstall: `npm run tsformat`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the default@0.0.0 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\MarçalGómez\AppData\Roaming\npm-cache\_logs\2018-05-04T15_27_52_026Z-debug.log

有什么想法吗?我也试过没有运气更新npm。

谢谢

3 个答案:

答案 0 :(得分:1)

我通过从package.json中删除参数postinstalltsformat解决了我的问题

这些参数在cli创建的新项目中不存在,所以我删除了它们,现在它正常工作。

答案 1 :(得分:0)

还有其他几个你需要解决的问题。

检查以下步骤,以便从Angular 5顺利升级到Angular 6.这些步骤提供了有关升级过程中遇到的问题以及解决方法的详细信息。

  • 将您的节点版本更新为8或更高版本并安装最新的Angular cli 全球由npm i -g @ angular / cli @ latest。
  • Angular 6使用angular.json作为配置文件而不是.anguar-cli.json。 tslint也被改变了。检查https://github.com/angular/angular-cli/wiki/angular-workspace 最新配置细节。你必须移动任何现有的 配置到新配置文件。
  • 要做到这一点,请创建另一个 使用新的'你的项目'和同样的最新cli虚拟项目 您之前为项目使用的默认值,例如前缀,样式等。 使用cli创建新项目 https://github.com/angular/angular-cli/wiki/new
  • 使用 https://update.angular.io/检查您的更改内容 当前版本的Angular→Angular 6.它提供了如何使用的方法 改变/修复它们。
  • 按照上述步骤复制/更新 在step2中创建的angular.json文件。在你的项目中,我要做到了 所有依赖项并执行npm update
  • 现在很重要。 RxJS 升级和解决冲突。 RxJS已标准化进口 此版本的运算符和Observable创建者。做npm i -g rxjs-tslint并在tslint.json
  • 中添加以下lint配置
{
  "rulesDirectory": [
    "node_modules/rxjs-tslint"
  ],
  "rules": {
    "rxjs-collapse-imports": true,
    "rxjs-pipeable-operators-only": true,
    "rxjs-no-static-observable-methods": true,
    "rxjs-proper-imports": true
  }
}
  • 现在运行lint --fix。这修复了一些项目,但大多数剩余的问题将突出显示,您必须手动修复它。

运营商名称更改:

do -> tap, 
catch -> catchError, 
switch -> switchAll, 
finally -> finalize

所有运营商都转移到了rxjs /运营商

import { map, filter, reduce } from 'rxjs/operators';

可观察的创建方法移至rxjs

   import { Observable, Subject, of, from } from 'rxjs'; 

你们都已经准备好了。欢迎来到Angular 6:) Check my blog post here on how to upgrade

答案 2 :(得分:0)

在遵循本指南时,我遇到了同样的问题,将角度从5变为https://update.angular.io/

特别是在必须执行时,我遇到了同样的错误

ng update @angular/material

我修复了卸载并重新安装typescript-formatter的问题。 这也导致zone.js和rxjs也卸载并重新安装,没关系。

之前的我的package.json看起来像这样:

...
"rxjs": "^5.5.6",
"typescript-formatter": "^5.2.0",
"zone.js": "^0.8.19"
...

现在看起来像这样:

...
"rxjs": "^6.2.2",
"typescript-formatter": "^7.2.2",
"zone.js": "^0.8.26"
...

一切都顺利进行