首页 > 编程知识 正文

npm最新版本是多少,windows激活原理

时间:2023-05-04 13:17:11 阅读:15880 作者:3603

本文来自网络易云社区

作者:陈观喜

在internet上,npm升级有很多方法,但在windows系统上并不是所有方法都可以正确升级。 其中,windows系统上的主要升级方法有以下三种:

首先最暴力的方法是删除nodejs和npm,然后在官方网站上下载最新的msi,然后msi安装更新你的node和npm。

其次是使用npm install -g npm。 这个方法是网上很多人使用的方法,但是这个方法有潜在的问题,下面介绍一下。

最后,使用npm-windows-upgrade进行升级。 请参阅how can I更新NPM on windows。 以管理员权限打开PowerShell,然后运行以下命令:

set-executionpolicyunrestricted-scope currentuser-forcenpminstall-gnpm-windows-upgrade NPM-windows-upgrade编码代码

在windows上准备模拟终端:推荐使用powershell。 经过本人测试,git bash和mintty终端模拟器在运行npm命令时存在问题。 对这两个终端运行的原理感兴趣的人可以考虑一下。

三种方法比较1 .升级和升级nodejs的方法只是删除nodejs和npm,然后下载和安装最新的node。 需要注意的是,删除npm时,必须将NODEJS目录下的npm文件夹和appdata roaming目录下的文件夹下的npm、npm-cache文件夹删除干净。

(NODEJS目录是您安装NODEJS的目录,默认值为C:Program Filesnodejs,而APPDATA的Roaming目录是c : 是指roaming目录) windows系统上的APP应用程序通常将数据和设置存储在用户的APPDATA目录中,每个windows用户都有自己的APPDATA目录。 )另外,APPDATA目录的用途是否参考了whatistheappdatafolderinwindows?

2.npm install -g npm方法(重点介绍)在执行此方法之前,让我们先看看我的当前节点和npm版本。

复制$ node -vv8.11.3$ npm -v5.6.0代码并运行npm install -g npm,可获得以下结果:

$ npm -v 6.4.1拷贝代码似乎升级成功了吗? 看看是不是真的。 nodejs目录的npm升级成功:

打开NODEJS目录下相应npm目录c :program filesnodejsnode _ modulesNPM中的package.json文件。

还是5.6.0!

然后,打开APPDATA路径下的npm目录(c :userschenguanxiappdataroamingNPM )。 可以看到这里新添加了NPM。 打开该package.json文件后,可以执行以下操作:

在终端下运行npm -v可获得APPDATA目录npm的版本结果。 那么,在执行npm命令时,到底要运行哪个npm呢?

根据上图,无论在哪个路径上执行npm,得到的结果都是相同的。 再深入一步,首先让我们看看NODEJS目录下的npm是如何运行的。 打开npm.cmd文件,查看此文件执行了什么。

npm命令执行原理:

请将npm.cmd文件标记为log,以查看相关变量。

运行npm -v的结果:

'~DP 0: ' c :program filesnodejs' node _ exe : ' c :program filesnodejsnode.exe ' npde ne NPM-CLI.js ' NPM _ prefix _ NPM _ CLI _ js 3360 ' c : _ SERS _ chenguanxi _ appi NPM-CLI.js ' NPM _ CLI _ js NPM nodejsnode.exec :userschenguanxiappdataroamingNPMnode _ modulesNPMbinNPM-cl

重要注释(有关具体命令,请参阅windows批处理(cmd/bat )编程详细信息) :

%~dp0只能在批处理文件中使用,它是存在的批处理文件

件的目录位置决定的,是批处理文件所在的盘符:+路径,

设置npm-cli-js文件为批处理文件处理的目录对应的npm-cli.js文件关键:执行"%NODE_EXE%" "%NPM_CLI_JS%" prefix -g这个命令,也就是npm prefix -g这个命令(这个命令在下一小节说明),可以得到:C:UserschenguanxiAppDataRoamingnpm。接着设置NPM_PREFIX_NPM_CLI_JS这个变量,如果存在NPM_PREFIX_NPM_CLI_JS,就把npm-cli.js设置为NPM_PREFIX_NPM_CLI_JS目录下的npm-cli.js文件

最后执行node.exe {对应的}node_modulesnpmbinnpm-cli.js

npm prefix -g这个命令得到以下结果:C:UserschenguanxiAppDataRoamingnpm具体命令执行的过程大概是通过读取prefix的配置,然后输出配置的结果

打开C:Program Filesnodejsnode_modulesnpm目录下的npmrc文件,可以看到只有一行的代码prefix=${APPDATA}npm

${APPDATA}指的是node环境下的process.env.APPDATA变量

结果是:C:UserschenguanxiAppDataRoaming


总结:

执行npm命令实际上是执行了node ${对应的}/npm-cli.js这个命令,关键是哪一个npm-cli.js文件:

总的执行过程就是要判断执行哪一个npm-cli.js文件。也就是说,如果存在全局prefix,那就执行全局prefix下的那个npm-cli.js 文件

也就是说执行npm命令,实际上是执行./node.exe ${对应的目录下}/node_modulesnpmbinnpm-cli.js

综上所述,npm命令执行的是nodejs目录下的npm命令。在弄清楚了npm是怎么执行之后,我们可以知道执行npm install -g npm 这个命令,其实是重新下载并安装了全局环境的npm包,然后通过prefix这个配置来链接到全局环境下的npm-cli.js文件,这个过程并没有对NODEJS目录下的npm版本进行任何修改。
所以,潜在的问题是当prefix配置被修改之后,npm执行的环境是未知的,不推荐这种通过链接到全局npm包的代理方式来升级npm。

3.npm升级的正确姿势应该是npm官方推荐的方法

参见How can I update npm on Windows?

用管理员权限打开PowerShell,然后执行以下命令:

Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Forcenpm install -g npm-windows-upgradenpm-windows-upgrade复制代码 npm-windows-upgrade的执行过程: 1. ensureExecutionPolicy:检查用户的powershell 执行权限政策等2. ensureInternet:检查用户的网络状况3. chooseVersion: 让用户选择一个npm版本4. choosePath: 找到正确的npm安装目录5. upgrade:自动找到正升级npm的正确目录,保护和重新应用现有的配置,最终调用npm install -g npm复制代码

详细过程有兴趣的可以打开源文件看一下: 主要是以下三个文件:

C:UserschenguanxiAppDataRoamingnpmnpm-windows-upgrade.cmd

C:UserschenguanxiAppDataRoamingnpmnode_modulesnpm-windows-upgradebinnpm-windows-upgrade.js

C:UserschenguanxiAppDataRoamingnpmnode_modulesnpm-windows-upgradelibupgrader.js

也就是说执行npm-windows-upgrade,它会帮助我们自动找到正升级npm的正确目录,保护和重新应用现有的配置,最终调用npm install -g npm

总结

综上,在windows系统下升级npm的最佳方法是用npm-windows-upgrade来升级,这样可以保护并且重新应用到现有的配置,避免了潜在的问题。 通过以上实验过程有以下知识点总结:

npm命令是通过node npm-cli.js 命令来实现的

windows系统下,npm的全局包管理环境和node目录是分开的

以上有不对的地方,希望大家指正。

参考:

How can I update npm on Windows?

What does %~dp0 mean, and how does it work?

What Is the AppData Folder in Windows?

npm wiki:Troubleshooting

windows批处理(cmd/bat)编程详解



网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区。


相关文章:
【推荐】 玩转可视化--来聊聊地图投影的学问
【推荐】 微服务监控探索


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。