Angular8升级至Angular13遇到的问题解决

目录
  • 前言
  • 一、开始之前
  • 二、升级步骤(一级一级的升级) 升级相关依赖
  • 三、常见问题
  • 总结

前言

根据项目需求,需要把Angular版本从8升级到13,无法从8直接升至13,需要一级一级的升级,本文介绍了在升级Angular版本的时候的一种报错和解决办法。

一、开始之前

首先确保你 Node.js >= 12.20

创建新的分支,或者使用其他方式备份当前项目

删除项目下 yarn.lock 或 package-lock.jso

二、升级步骤(一级一级的升级) 升级相关依赖

  1. 升级相关依赖
    前往 update.angular.io 将项目升级到 Angular (9-13版本)。
  2. 如果你有单独使用 @angular/cdk 请执行 ng update @angular/cdk@(9-13版本)
  3. 升级 NG-ZORRO,运行 ng update ng-zorro-antd@(9-13版本)
  4. 升级 NG-ALAIN,运行 ng update ng-alain(9-13版本)

三、常见问题

错误1:WARNING in xxx is part of the TypeScript compilation but it’s unused.Add only entry points to the ‘files’ or ‘include’ properties in your tsconfig.

// 在exclude后加上以下信息
 "files": ["../src/main.ts", "../src/polyfills.ts"],
 "include": ["src/**/*.d.ts"]

错误2:Repository is not clean. Please commit or stash any changes before updating.

ng update --all  --force --allow-dirty

错误3: Package ‘@angular/core’ is not a dependency…

类似以上错误重新安装依赖

npm i

错误4:ERROR in ./src/styles.less (./node_modules/css-loader/dist/cjs.js??ref–14-1!./node_modules/postcss-loader/src??embedded!./node_modules/less-loader/dist/cjs.js??ref–14-3!./src/styles.less) Module build failed (from ./node_modules/less-loader/dist/cjs.js):@import ‘~@delon/theme/styles/index’;Can’t resolve ‘@delon/theme/styles/index.less’ in ‘xxx;in xxx\src\styles.less (line 2, column 0);@import ‘~@delon/theme/styles/default’;Can’t resolve ‘@delon/theme/styles/default.less’ in ‘xxx\src\app\layout\passport’

路径有变化, 把 @import ‘~@delon/theme/styles/index’; 多余的一层目录去掉:styles 报错的目录文件均需要去除多余目录

如果路径对着,但是还报如下错误:

angular.json未配置样式路径导致:

"stylePreprocessorOptions": {
  "includePaths": [
    "node_modules/"
  ]
}

错误5 src/app/layout/default/header/components/taskmange.component.ts:33:28 – error NG1001: @ViewChild options must be an object literal @ViewChild(“taskDrawer”, null) taskDrawer;

原因:ViewChild需要两个参数,并没有提供opts

官网解释:

static – whether or not to resolve query results before change detection runs (i.e. return static results only). If this option is not provided, the compiler will fall back to its default behavior, which is to use query results to determine the timing of query resolution. If any query results are inside a nested view (e.g. *ngIf), the query will be resolved after change detection runs. Otherwise, it will be resolved before change detection runs.

此段解释在中文文档中并没有被翻译,大体意思如下:

static – 是否在更改检测运行之前解析查询结果(即只返回静态结果)。如果不提供此选项,编译器将退回到其默认行为,即使用查询结果来确定查询解析的时间。如果任何查询结果位于嵌套视图中(例如*ngIf),则在运行更改检测后将解析该查询。否则,它将在变更检测运行之前被解析。

@ViewChild("taskDrawer", {static: true}) taskDrawer;

 // 或者
 @ViewChild("taskDrawer", {static: false}) taskDrawer;

// 或者
 @ViewChild("taskDrawer") taskDrawer;

根据官方提供的,不同场景设置。

错误6:样式不见了

// angular.json 文件引入
"styles": [
	 "src/styles.less",
     "./node_modules/ng-zorro-antd/ng-zorro-antd.min.css"
],
// styles.less文件引入
@import '~ng-zorro-antd/ng-zorro-antd.less';
@import '~ng-zorro-antd/style/entry.less'; /* 引入基本样式 */
@import '~ng-zorro-antd/button/style/entry.less'; /* 引入组件样式 */

错误7:ERROR in src/app/core/i18n/i18n.service.ts:13:24 – error TS2307: Cannot find module ‘date-fns/locale/en’.13 import * as df_en from ‘date-fns/locale/en’;

import { enUS as dfEn, zhCN as dfZhCn, zhTW as dfZhTw, vi as dfVi } from 'date-fns/locale';

错误8: import { STColumn, STComponent, STReq, STRequestOptions, STRes } from ‘@delon/abc/table’;

// https://github.com/ng-alain/ng-alain/issues/1569 里有说明路径变化,更改即可
import { STColumn, STComponent, STReq, STRequestOptions, STRes } from '@delon/abc/st';

错误9:error TS2307: Cannot find module ‘date-fns/distance_in_wor,import * as distanceInWordsToNow from ‘date-fns/distance_in_words_to_now’;

import formatDistanceToNow from 'date-fns/formatDistanceToNow';

错误10:polyfills.js:7568 Unhandled Promise rejection: R3InjectorError(AppModule)[ApplicationModule -> ApplicationRef ->ApplicationInitStatus -> InjectionToken Application Initializer -> [object Object] -> StartupService -> ACLService -> ACLService ->ACLService]:NullInjectorError: No provider for ACLService! ; Zone: ; Task: Promise.then ; Value: NullInjectorError: R3InjectorError(AppModule)[ApplicationModule -> ApplicationRef -> ApplicationInitStatus -> InjectionToken Application Initializer -> [object Object] ->StartupService -> ACLService -> ACLService -> ACLService]:NullInjectorError: No provider for ACLService!

// 仔细看错误发现No provider for ACLService,则在app.module.ts中引入 ACLService ,缺什么引什么
  providers: [
    // 略
    ACLService,
    AlainConfigService,
  ],

错误11:Package ‘@angular/core’ is not a dependency…

npm i

错误12:ERROR in Failed to list lazy routes: Unknown module ‘E:/xxx/src/app/app.module#AppModule’.

错误12:ERROR in Failed to list lazy routes: Unknown module ‘E:/xxx/src/app/app.module#AppModule'.

错误13:Angular11 升级报错:Angular Forms error: Two incompatible decorators on class

在Google搜索了解决办法,发现遇到这种情况的人不少,但是都没有明确的解决办法,或者解决办法在本项目不适用。随后查阅了Angular的文档,发现通过以下方法可以解决问题。

在tsconfig.json中添加以下代码:

{
  "angularCompilerOptions": {
    "fullTemplateTypeCheck": true,
    "strictInjectionParameters": true
  },
}

错误14:typescript不兼容问题 @angular/compiler-cli@8.0.3 requires a peer of typescript@>=3.4 ️.5 but none is installed. You must install peer dependencies yourself.

解决办法:

安装兼容版本

运行命令

npm i typescript@3.4.3

错误15:import { NzMessageService, UploadFile } from ‘ng-zorro-antd’;

组件导入路径发生了变化

import { NzMessageService } from 'ng-zorro-antd/message';
import { NzUploadFile } from 'ng-zorro-antd/upload';

错误16:import { NzModalService } from ‘ng-zorro-antd’;

组件导入路径发生了变化

import { NzModalService } from 'ng-zorro-antd/modal';

错误17:自定义主题色不起作用

angular.json 删除引入的组件主题色

src/styles.less 里引入预定义主题文件

@import "../node_modules/ng-zorro-antd/ng-zorro-antd.less";

@import './styles/theme';
@import './styles/index';

错误18:Can’t bind to ‘formGroup’ since it isn’t a known property of ‘form’

使用 Reactive Forms 需要额外引入 ReactiveFormsModule,可以参考官方文档(https://angular.io/guide/reactive-forms)。

错误19:Angular12报错(resize-observer-polyfill) TS2717:Property contentRect must be of type DOMRectReadOnly

解决办法:

(1) 由于报错的是第三方类库,只能等待第三方类库去修复该错误。

(2) 在第三方修复之前,可以禁用第三方类库的检查。

在项目根目录的 TS 配置文件 tsconfig.json 中新增 skipLibCheck 属性。

{
  "compilerOptions": {
 	。。。。。。

    "skipLibCheck": true   <---- 增加该配置
  }
}

错误20:

解决方案:npm install --save-dev raw-loader

{
  "compilerOptions": {
 	。。。。。。

    "skipLibCheck": true   <---- 增加该配置
  }
}

错误21:多次注入

platformBrowserDynamic被多次注入(一般为main.ts和app.module.ts),删除多余的,保留一个,可以删App.module.t

错误22:angular 从11.x更新到12.x 收到DON‘T USE IT FOR PRODUCTION!警告

angular从11.x版本升级到12.x版本后,会收到

This is a simple server for use in testing or debugging Angular applications locally.
It hasn’t been reviewed for security issues.

DON’T USE IT FOR PRODUCTION!

的警告,除了升级其他的并未修改,11.x版本的运行ng serve并没有这个警告。

我是升级到12.2.17版本的,重新运行:

ng update @angular/cli --migrate-only --from=11.2.0 --to=12.2.17

运行后在ng serve那个警告就消失了

错误23:Git无法提交(Must use import to load ES Module: /Users/cipchk/Desktop/work/ng-alain/node_modules/@angular/compiler/fesm2015/compiler.mjs)

升级步骤是逐步运行,每一步都需要 git commit,注释掉 .husky/pre-commit 中的 npx 开头的行,在升级完成后再次打开。

错误24:An unhandled exception occurred: Directory import ‘/media/fuchaoyang/f5558d47-6c02-44ae-89da-2817f50425cf/angular12/licadmin/node_modules/@angular-devkit/build-angular/src/dev-server’ is not supported resolving ES modules

版本不兼容所致

// 升级前
"@angular-devkit/build-angular": "~12.2.18"
// 升级后
"@angular-devkit/build-angular": "~13.3.9",

错误25:export ‘startWith’ (imported as ‘startWith’) was not found in ‘rxjs’

rxjs版本过低所致,升级版本

// 升级前
 "rxjs": "~6.5.3"

// 升级后
"rxjs": "~7.5.0"

错误26:Error: src/app/routes/dtreportmodule/data-report/pandect/pandect.component.ts:6:10 – error TS2305: Module ‘”@delon/chart”‘ has no exported member ‘G2TimelineData’.

组件路径发生了变化

import { G2TimelineData } from '@delon/chart/timeline';

错误27:编译后git出现了很多缓存编译文件

更新目录.gitignore文件增加如下忽略项:

# See http://help.github.com/ignore-files/ for more about ignoring files.

# Compiled output
/dist
/tmp
/out-tsc
/bazel-out

# Node
/node_modules
npm-debug.log
yarn-error.log

# IDEs and editors
.idea/
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# Visual Studio Code
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*
# Miscellaneous
/.angular/cache
.sass-cache/
/connect.lock
/coverage
/libpeerconnection.log
testem.log
/typings
# System files
.DS_Store
Thumbs.db

错误28:抽屉组件内部自定义内容无法展示

自定义ng-content 外面需要 包起来

错误29:antd-Table组件渲染数据时出现第一行空白行

antd table 加上 [nzScroll]=”{ x: ‘1500px’ }” 出现空白行

解决办法:

:host ::ng-deep .ant-table-measure-now{
  // display: none;
  visibility: collapse;
}

30.报错如下:

解决方式: 在tsconfig.json里新增”skipLibCheck”: true

总结

到此这篇关于Angular8升级至Angular13遇到的问题解决的文章就介绍到这了,更多相关Angular8升级Angular13问题内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0

    现在Angular CLI在npm下通过@angular/cli来替代angular-cli,并且它只支持Node6.9.0或更高的版本,npm 3或更高的版本.所以在升级angular cli之前,请先升级node和npm. 如果你使用Angular CLI beta.28或更低的版本,你需要先卸载掉 angular-cli包: npm uninstall -g angular-cli npm uninstall --save-dev angular-cli 如果你忘记了更新npm,执行上面第

  • 将Angular单项目升级为多项目的全过程

    目录 前言 开发环境 生成新工程 移动web项目 angular.json 公共模块 总结 前言 有时候在开发的过程中发现一个Angular项目不太够用,两个独立的项目又不太好复用.比如当前我们需要一个新的运行于微信小程序端的H5项目,但却在想在新的H5项目中应用原WEB项目中实体.Share.Serivce以及MockApi等模块.此时,便需要将原来的Angular项目简单做个升级. 情景: 当前已经有了一个运行于浏览器端的web项目. 在当前项目的基础上新增一个wechat项目. 将web项

  • Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法

    前言 RxJS是一种针对异步数据流编程工具,或者叫响应式扩展编程:可不管如何解释RxJS其目标就是异步编程,Angular引入RxJS为了就是让异步可控.更简单.可是最近在升级中遇到了一些问题,下面就来给大家介绍下,给同样遇到这个问题发朋友们一些参考,下面话不多说了,来一起看看详细的介绍吧. Angular 5.0.5升级RxJS到5.5.3报错: ERROR Error: Uncaught (in promise): EmptyError: no elements in sequence Em

  • Angular(5.2->6.1)升级小结

    在前面的文章中也曾经分别提到过,angular6由于存在一些稍大的变化,所以不能像Angular4到Angular5那样基本无感地进行升级,这里结合官方提示,简单整理一下Angular5.2到目前稳定的6.1的升级要点. 事前准备 变更内容 除此之外,还需要确认如下内容: tsconfig.json: preserveWhitespaces设定为off(v6缺省设定) package.json中scripts的使用,所有的cli命令统一使用两个横线–传入参数(POSIX规范) ngModelCh

  • Angular2平滑升级到Angular4的步骤详解

    前言 Angular4终于在两天前发布了正式版本,那么怎么升级呢?其实Angular2和Angular4之间属于平滑过渡,并不像1和2之间颠覆性的重写代码. Angular4现已发布  http://www.jb51.net/article/109685.htm 为什么跳过Angular 3? 根据Angular团队首席开发Igor Minar的说法:随着Angular 2的发布,Angular团队引入了语义化版本控制规范,即:将语义化版本用三组数字来表示,按照major.minor.patch

  • Angular项目如何升级至Angular6步骤全纪录

    前言 前段时间将所负责的 Angular2 项目升级到了 Angular5 版本,这两天又进行了升级至 Angular6 的尝试.总的来说,两次升级过程比较类似,也不算复杂. 2018年5月4日,Angular6.0.0版正式发布,新版本主要关注底层框架和工具链,目的在于使其变得更小更快. 特性的小改动: animations: 只能使用 WA-polyfill 和 AnimationBuilder animations: 在转换匹配器中暴露元素和参数 common: 在 NgIf 中使用非模板

  • Angular8升级至Angular13遇到的问题解决

    目录 前言 一.开始之前 二.升级步骤(一级一级的升级) 升级相关依赖 三.常见问题 总结 前言 根据项目需求,需要把Angular版本从8升级到13,无法从8直接升至13,需要一级一级的升级,本文介绍了在升级Angular版本的时候的一种报错和解决办法. 一.开始之前 首先确保你 Node.js >= 12.20 创建新的分支,或者使用其他方式备份当前项目 删除项目下 yarn.lock 或 package-lock.jso 二.升级步骤(一级一级的升级) 升级相关依赖 升级相关依赖前往 up

  • Java编程删除链表中重复的节点问题解决思路及源码分享

    一. 题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 二. 例子 输入链表:1->2->3->3->4->4->5 处理后为:1->2->5 三. 思路 个人感觉这题关键是注意指针的指向,可以定义一个first对象(值为-1,主要用于返回操作后的链表),first.next指向head,定义一个last同样指向first(主要用于操作记录要删除节点的前一个节点),定义一个p指向head,指向当前节点.

  • IOS 下获取 rootviewcontroller 的版本不同的问题解决办法

    IOS 下获取 rootviewcontroller 的版本不同的问题解决办法 一般 原生的 [[UIApplication sharedApplication].keyWindow.rootViewController presentModalViewController:self animated:NO]; 可以 获取  系统的  rootviewcontroller 但 cocos2d-x 2.1.1 在 appcontroller.mm 内定义的 加载方法是 // Set RootVie

  • java 多线程饥饿现象的问题解决方法

    java 多线程饥饿现象的问题解决方法 当有线程正在读的时候,不允许写 线程写,但是允许其他的读线程进行读.有写线程正在写的时候,其他的线程不应该读写.为了防止写线程出现饥饿现象,当线程正在读,如果写线程请求写,那么应该禁止再来的读线程进行读. 实现代码如下: File.Java package readerWriter; public class File { private String name; public File(String name) { this.name=name; } }

  • python中requests爬去网页内容出现乱码问题解决方法介绍

    最近在学习python爬虫,使用requests的时候遇到了不少的问题,比如说在requests中如何使用cookies进行登录验证,这可以查看这篇文章.这篇博客要解决的问题是如何避免在使用requests的时候出现乱码. import requests res=requests.get("https://www.baidu.com") print res.content 以上就是使用requests进行简单的网页请求数据的方式.但是很容易出现乱码的问题. 我们可以通过在网页上右击查看

  • IOS 键盘挡住输入框的问题解决办法

    IOS 键盘挡住输入框的问题解决办法 在iOS开发发现一个问题,有时输入框位于低出时,当编辑输入时,弹出的键盘会挡住输入框,令用户看不清楚实时的输入情况,使界面交互极度不友好. 经过查资料终于解决了这个问题. 解决思路: 1. 输入框监听UIControlEventEditingDidBegin事件,当用户开始输入时,将整个view上移. 2. 输入框监听UIControlEventEditingDidEnd事件,当用户结束输入时,将整个view下移,恢复到原位置. 输入框监听事件: [text

  • Android webview旋转屏幕导致页面重新加载问题解决办法

    Android webview旋转屏幕导致页面重新加载问题解决办法 1. 在create时候加个状态判断 protected void onCreate(Bundle savedInstanceState){ ... if (savedInstanceState == null) { mWebView.loadUrl("your_url"); } ... } 2. 重载保存状态的函数: @Override protected void onSaveInstanceState(Bundl

  • Mysql从5.6.14安全升级至mysql5.6.25的方法

    服务器上Mysql的版本为:社区版的mysql-community-server-5.6.14.近日局方对服务器进行漏洞扫描,发现zhyh08上的mysql存在几个高危漏洞,要求进行修复.受这几个漏洞影响的主要是5.6.17及以前的版本,所以将mysql升级至最新的5.6.25即可解决问题. 1.下载最新的mysql安装包(rpm文件),链接如下: MySQL-5.6.25-1.el6.x86_64.rpm-bundle.tar 2.备份数据库数据,这里使用的是mysqldump命令. 3.备份

  • javascript 中设置window.location.href跳转无效问题解决办法

    javascript 中设置window.location.href跳转无效问题解决办法 问题情况 JS中设置window.location.href跳转无效 代码如下: <script type="text/javascript"> function checkUser() { if(2!=1){ window.location.href="login.jsp" rel="external nofollow" rel="e

  • Python pip安装lxml出错的问题解决办法

    Python  pip安装lxml出错的问题解决办法 1.  在使用pip安装lxml过程中出现了一下错误: >>> pip install lxml C:\Users\Chen>pip install lxml Collecting lxml Using cached lxml-3.5.0.tar.gz Installing collected packages: lxml Running setup.py install for lxml ... error Complete

随机推荐