首页 > 其他分享 >从Angular 13升级到Angular 15

从Angular 13升级到Angular 15

时间:2023-08-08 18:55:04浏览次数:42  
标签:13 15 14 Angular 升级 ng angular

1. 前言

升级应用程序或者框架是软件生命周期中非常重要的一项活动. 因为其有风险性, 很多人不愿意去做, 久而久之随着技术债务的积累变成了一件不能去做的事情.

在我的职业生涯中见到过很大这样逐渐失去生命活力的系统, 这里就不具体举例了, 以免引起不必要的争论, 明白的人自然明白.

其中的风险, 主要来自新旧版本的不兼容性. 如果兼容旧版本, 无疑是库开发者负责任承担起了这种风险, 但是也导致库变得臃肿, 因循守旧, 开发低效, 逐渐地失去活力. 如果库开发者一路更新向前, 不考虑向前兼容, 库开发走得轻快了, 也该库或者框架的使用者带来了很多创新性的体验, 但是把兼容性风险留给了使用者. 在兼容性, 和创新节奏, 库的活力之间看似鱼和熊掌很难兼得.

而Angular在兼容性和变革之间很好地为我们做出了一个榜样, 也是将来版本升级很好的榜样. 首先Angular是大胆变革的. 其主版本号没6个月就有一次变更, 自从2016年发布Angular 2.x版本后, 如今一直保持着相似的节奏, 一路升级到Angular 16.x. 而每次主版本号的变更可能包含了大量的breaking change和新特性. 其中有好几个大版本之间差异是很大的. 而Angular是如何做到既大胆创新, 又兼顾历史遗留的呢? 那就是Angular schematics, 它不是简单的代码生成工具. 它也是一个代码重构工具, 这样Angular就可以大版本变化是使用一个或多个schematics帮助老旧系统自动完成绝大多数的重构工作. 这样旧系统就可以轻松的升级到新版本的Angular了. 只要按照Angular提供的升级路线, 库或框架使用者就能轻松的完成升级 而Angular也不必在新的库中考虑老用户一些传统的习惯和使用方式, 做到轻松上阵.

无独有偶, gitlab的升级方式也是类似的, 在大版本之间提供postscript来弥合新旧版本的差异, 并给使用者提供了清晰的升级路线图. 所以可以预测在将来的开发中, 这种在新旧版本之间使用postscript或Schematics的方式将逐渐成为一种版本升级的趋势. 开发过库代码的人肯定知道向前兼容是一件多么烧脑和让代码逻辑变得扭曲的事情.

而这种方式带来的坏处就是, 升级变得不像以前那么简单了, 以前升级只需要改个数字, 而现在需要去查升级路线图, 还要执行相应的弥合裂缝的代码. 但是深入思考一下, 这种牺牲还是很值得的, 因为以前开发人员改一下版本号是轻松, 但是将潜在的问题留给了测试人员, 甚至留给了运维人员, 甚至更后, 变得越来越昂贵. 而现在有一条清晰的升级路线, 而这条路线是无数人踩过的, 心里总是会踏实很多.

2. 升级前的准备工作

升级前最好阅读一遍Angular 14, 15的release notes. 本文讲述的是从Angular 13升级到Angular 15, 所以需要阅读这两个release notes: Angular 14 release notes
Angular 15 release notes

里面详细描述了有那些breaking change那些新的弃用, 多我们的迁移工作会非常有帮助.

另外我们需要阅读一下更新指南, 这个更新指南是一个动态的指南, 需要选择从哪个版本升级到哪个版本, 项目中用到了哪些特殊包, 在此基础上系统自动帮我们生成一份更新指南, 非常的人性化, 这是Angular升级特殊之处, 也是很容易被忽视的一点. 更新指南可以在这里找到

3. 开始升级

由于本文的目标是从Angular 13升级到Angular 15, 所以升级路径首先是从Angular 13升级到Angular 14再从Angular 14升级到Angular 15, 不能一次性升级到Angular 15.

3.1. Angular 13升级到Angular 14

3.1.1. 步骤一: 更新所有Angular的组件到14

ng update @angular/core@14 @angular/cli@14 --force

注意,不加–force无法正常升级。
同时,还要事前事后都要commit一次。

3.1.2. 步骤二: 升级Angular Material到v14

ng update @angular/material@14 --force

该步骤只适用于使用了Angular Material的项目。

3.1.3. 步骤三: 更新eslint到v14

 ng update @angular-eslint/schematics@14

如果项目中使用了angular-eslint, 可以使用以上命令升级到v14。

3.1.4. 步骤四:更新一些别的非Angular官方的组件


npm i @angular/[email protected] [email protected]

3.1.5. 步骤五:更新typescript到4.6

官方文档说,Angular 14支持4.6,没必要安装更新的Typescript版本,免得无谓的不兼容问题。

npm install [email protected] -D

3.1.6. 步骤六,更新代码

手动解决一些更新指南中的内容.

另外一个问题,如果使用了moment、lodash这样的库,会报出一条warning:

material-moment-adapter.mjs depends on ‘moment’. CommonJS or AMD dependencies can cause optimization bailouts.

官方文档:链接
答案是去更新Angular.json

"allowedCommonJsDependencies": [
        "lodash",
        "moment"
 ]

3.1.7. 步骤七:启动程序, 手动测试

现在可以启动程序了npm run start或者ng serve, 并进行一些测试和检查.

3.2. Angular 14升级到Angular 15

3.2.1. 步骤一: 更新所有Angular的组件到15

ng update @angular/core@15 @angular/cli@15 @angular/material@15 --force

为了防止一些次要组件不兼容导致主要的升级过程失败, 可以加上--force选项.

当然如果你想再主要组件升级之前解决所有阻碍升级的问题, 则可以去掉force选项.

如果使用到@angular-eslint, 可以使用如下命令更新@angular-eslint到v15

ng update @angular-eslint/schematics@15

3.2.2. 步骤二: 迁移Legacy Angular material组件到MDC-based Angular material组件

因为从Angular 14到15, material design组件发生了比较大的变化, 所以需要执行这一步骤.

详情请阅读Material MDC Migration的官方文档 以及我翻译的文章鹏叔的技术博客空间 MDC-based Angular Material组件迁移

ng generate @angular/material:mdc-migration

执行上述指令或者创建一条新的script在运行都可以。
这条migration指令提供了交互式的选项,根据本身项目的特点进行选择。

3.2.3. 步骤三: 执行测试指令

ng test

在新的版本上对原代码进行编译和测试,有助于升级后的问题发现和解决。

3.2.4. 步骤四:启动程序, 手动测试

现在可以启动程序了npm run start或者ng serve, 并进行一些测试和检查.

npm run start
# 或者
ng serve --open

后记

本文原文位于从Angular 13升级到Angular 15, 欢迎访问原文以获得最近更新.
更多Angular相关文章请访问鹏叔的技术博客空间 - Angular专题

4. 参考文档

Angular:升级Angular 13到Angular 14

Angular: 升级Angular 14到Angular 15

标签:13,15,14,Angular,升级,ng,angular
From: https://www.cnblogs.com/guoapeng/p/17615161.html

相关文章

  • ABC313C 扩展
    简要题意:给定长为\(n\)的序列,再给定\(k\),可以进行若干次以下操作:每次选定一个数\(i(1\lei\len)\)使得\(a_{i}\leftarrowa_{i}+k\)或者\(a_{i}\leftarrowa_{i}-k\),最小化最终数组的最大值与最小值之差。这个题是去年学校模拟赛的题目,这两天又给翻了出来((......
  • 行行AI人才直播第15期:【AIGC科技公司法律顾问】Amber《AIGC的法律挑战》
    近年来,AIGC技术的迅速进步为社会经济发展带来了新的机遇。各行各业都开始关注AIGC相关技术在商业落地中的应用,AIGC相关的创业及项目如雨后春笋般涌现。然而,AIGC的广泛应用也带来了一系列的法律风险和挑战。任何关于AIGC的行业讨论,你会听到支持者和批评者,都在以越来越关切的语气,小......
  • 微信小程序15 做一个搜索框的样式
    一般来说首页上都会有搜索的功能,那么我们来加个搜索框试试在newlist上继续操作 简单搜索框的布局和样式页面上<viewclass="headClass"><inputtype="text"placeholder="请输入"></input></view>但是这样太丑了,完善一下样式.headClass{background-color:silver;......
  • H7-TOOL的高速DAPLINK用于新版STM32CubeIDE V1.13及其以上版本的超简单实现方法(2023-0
    之前分享了一个方法,太繁琐了,H7-TOOL群的群友提供了一个方法,实现非常简单。1、使用STM32CubeMX或者自己创建一个STM32CubeIDE工程后,设置这两个地方即可: 配置调试器,设置完毕记得点击右下角的Apply2、然后修改这个cfg文件,F407IGTDebug.cfg,注意和第1步cfg是一个文件。修改......
  • STC15 外部中断编程笔记
    以STC15W4K58S4为例,可以将片上的外部中断资源分为“高级”和“低级”两类,EXINT0和EXINT1属于高级的,EXINT2~EXINT4属于低级的。“高级”的外部中断可以配置中断优先级,选择中断源;低级的则不行。EXINT0和EXINT1的配置这两个外部中断的配置寄存器都可位寻址,因此可以直......
  • 「P4313」文理分科 解题报告
    「P4313」文理分科题目描述文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过)小P所在的班级要进行文理分科。他的班级可以用一个\(n\timesm\)的矩阵进行描述,每个格子代表一个同学的座位。每位同学必须从文科和理科中选择一科。同学们在选择科目的时候会获......
  • event 10513将禁止smon进程进行事务回滚
    Oracle参数之event10513发布时间:[2012-4-10]    来源:    作者:    点击:我们设置Oracle参数event10513将禁止smon进程进行事务回滚。在进行troubleshooting时,如shutdownabort后设置该速度可以加快数据库的open速度,注意加快速度的同时,也可能带来数据库一致性问......
  • POJ 1392 Ouroboros Snake
    \(POJ\)\(1392\)-\(Ouroboros\)\(Snake\)//这道题和上面那道题几乎一样,算是变形题把,这道题要求构造的01字符串就是必须是字典序最小的,//在上面那道题的注意下建边的顺序即可.因为是链式前向星法,应该大边在前。\(Code\)#include<iostream>#include<algorithm>#......
  • CSP模拟15
    四道CF。虽然我没打过CF,但我每天都在打CF。A.[CF1850G]TheMorningStar首先,对于两个互相满足条件的点,其方案数为\(2\)。那么对于\(n\)个互相满足条件的点,他们对答案的贡献是\[2\dbinom{n}{2}=n(n-1)\]然后就是分类讨论四种相互满足条件的情况。横坐标相同的点相......
  • AtCoder Beginner Contest 313
    AtCoderBeginnerContest313A-ToBeSaikyo思路:找到最大的,和第一个比较#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong//#defineint__int128#definedoublelongdoubletypedefpair<int,int>PII;typedefpair<string,int>PSI;t......