Angular CLI 里打印出来的 TypeScript 版本号是从哪里来的

文质彬彬
• 阅读 186

在探讨 Angular CLI 中 ng version 命令如何解析 TypeScript 版本号的过程中,我们需要深入了解 Angular CLI 的工作原理以及它如何与项目依赖进行互动。Angular CLI 是一个强大的前端构建工具,它提供了一系列命令来帮助开发者初始化、开发、构建和维护 Angular 应用。ng version 命令用于显示 Angular CLI 和项目依赖的版本信息,其中就包括 TypeScript 的版本。

Angular CLI 在执行 ng version 命令时,会检查项目中的 node_modules 文件夹,以及相关的 package.json 文件。具体到 TypeScript 版本的解析,这一过程主要涉及以下几个步骤:

解析过程概览

  • 读取 package.json 文件:Angular CLI 首先会在项目根目录下查找 package.json 文件。这个文件包含了项目的元数据和依赖信息,其中就定义了 TypeScript 的版本号,通常位于 devDependenciesdependencies 节点下。
  • 查找 node_modules 目录:在获取到 TypeScript 的版本号后,CLI 会进一步验证这个版本号与实际安装在 node_modules/typescript 目录下的 TypeScript 版本是否一致。这是因为项目可能会通过 npm installyarn add 命令更新依赖,而 package.json 文件中记录的版本号可能与实际安装的版本存在差异。
  • 读取 TypeScript package.json 文件:为了获取精确的 TypeScript 版本信息,CLI 会读取 node_modules/typescript/package.json 文件中的 version 字段。这一步骤确保了显示给用户的 TypeScript 版本是准确无误的,反映了当前项目实际使用的版本。

示例分析

假设一个 Angular 项目的根目录下有一个 package.json 文件,其中包含了如下的依赖定义:

{
  "dependencies": {
    "@angular/core": "^12.0.0"
  },
  "devDependencies": {
    "typescript": "^4.2.3"
  }
}

在这个例子中,typescript 被定义在 devDependencies 中,版本号为 ^4.2.3。这意味着项目可以使用 TypeScript 4.2.3 及其以上版本,但不会自动升级到下一个主版本(5.x)。

当执行 ng version 命令时,Angular CLI 会根据上述解析过程,首先查找并分析这个 package.json 文件,然后进一步确认 node_modules/typescript/package.json 中记录的 version 字段。如果 node_modules 目录中实际安装的 TypeScript 版本是 4.3.5,那么 ng version 命令打印出来的 TypeScript 版本将会是 4.3.5,即使 package.json 文件中定义的是 ^4.2.3

总结

通过以上分析,我们了解到 Angular CLI 的 ng version 命令解析 TypeScript 版本的过程是相当精确和可靠的。它不仅考虑了项目配置文件中的定义,还会检查实际安装的依赖版本,以确保开发者能够获得准确的版本信息。这一机制对于维护项目的依赖关系、确保项目的稳定性以及避免版本冲突等方面都至关重要。通过理解这一过程,开发者可以更有效地管理和维护他们的 Angular 应用及其依赖。

做个实验:

Spartacus 6.0 版本下:
Angular CLI 里打印出来的 TypeScript 版本号是从哪里来的

TypeScript 4.9.5:
Angular CLI 里打印出来的 TypeScript 版本号是从哪里来的

Angular CLI 里打印出来的 TypeScript 版本号是从哪里来的

而我随便换一个文件夹,就打印不出来 TypeScript 版本:
Angular CLI 里打印出来的 TypeScript 版本号是从哪里来的

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
4年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
子桓 子桓
2年前
JavaScript开发工具:WebStorm for Mac v2023.1
WebStorm是由JetBrains公司开发的一款专业的JavaScript开发工具,它支持多种前端开发技术和框架,包括HTML、CSS、JavaScript、TypeScript、React、Angular、Vue等等。它具有丰富的功能和直观的用户界面
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
4年前
Angular5.1新版本以及更多可用功能
Angular5.1版本发布了。这是一个小版本,包含几个小的功能和bug修复。我们也发布了AngularCli的1.6版本,以及AngularMaterial的第一个稳定版本。!(https://oscimg.oschina.net/oscnet/f8f7d922eedf43009f53ebe995e0ce54.png)新特性
Stella981 Stella981
4年前
Angular CLI 常用命令
AngularCLI是Angular客户端命令行工具,提供非常多的命令来简化Angular的开发。本文总结了在实际项目中经常会用到的AngularCLI命令。!AngularCLI(https://waylau.com/images/post/20181109ngcli.jpg)获取帮助(ngh)
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这