博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nvmw安装,用于控制node版本;
阅读量:4684 次
发布时间:2019-06-09

本文共 13441 字,大约阅读时间需要 44 分钟。

之前一直使用的是node v2.2.0版本,挺说新版本的node解决了npm安装插件产生文件夹结构过深的问题,所以就想更新试试;

上网一看才发现,尼玛的node已经到了6.+版本了,好吧,看来还是得跟上节奏;

但是呢,怎么更新node就成了个问题,卸载重装? 这样又会出现一些配置的麻烦;

经过一番查找发现:可以使用 nvm 管理不同版本的 node 与 npm;

nvm 是 Mac 下的 node 管理工具,有点类似管理 Ruby 的 rvm,如果是需要管理 Windows 下的 node,官方推荐是使用 nvmw 或 nvm-windows 。

接下来就记录一下我安装nvmw的具体过程和一些坑;(不要问我为什么选nvmw,因为穷叼不会用Mac,而-windows貌似有些问题)

 

百度了一早上,终于完成了node的升级,从头开始来吧,也整理了一下其中遇到的问题;

1、首先下载   nvmw https://github.com/hakobera/nvmw
方法:
git clone https://github.com/hakobera/nvmw.git;或者直接下载zip压缩包;

由于本人的git不知道抽什么疯,clone的时候一直出现

如果有大神知道是什么问题,请评论留言;万分感谢;

 

2、配置环境变量
复制nvmw路径,我的电脑右键→属性→高级系统设置→高级→环境变量
这里我用户环境和系统环境都该了,照理说改系统环境就可以了;

 

这里有个坑,就是修改变量后要重新关闭CMD,重开一次,才能正常运用;

3、配置完后打开CMD,输入nvmw,如果正确配置的话可以查看帮助
百度的时候听说 nvmw install v6.9.2 无法安装成功;
我没试过,不过我用的是没有v的 nvmw install 6.9.2成功了;

 

4、不要高兴的太早,这才是刚刚开始

第一个坑: 直接使用nvmw install 6.9.2 来安装新版本时提示:

解决办法:这样的错误,原因是因为JS扩展名的文件被其他软件关联了,需要取消关联。
如系统中安装了ULTRAEDIT或者E钻加密软件等,就需要去掉关联;
或者如下解决方法:
在运行中输入“regedit”进入注册表,
只需要把[HKEY_CLASSES_ROOT\.js] 项下的那个默认值改成 "JSFile" 就可以正常运行JS 文件了。

第二个坑:

这货直接在天朝是使用不了的,好在这个外国作者也知道中国的国情。提供了如何设置淘宝镜像的方式
set "NVMW_NODEJS_ORG_MIRROR=http://npm.taobao.org/mirrors/node"
set "NVMW_IOJS_ORG_MIRROR=http://npm.taobao.org/mirrors/iojs"
set "NVMW_NPM_MIRROR=http://npm.taobao.org/mirrors/npm"
注:每次使用,都得重新在命令行中设置,或者可以这三个变量也设置到环境变量中,或改一下他的源码,把这三个变量写死。
第三个坑:我是windows7系统,对应的是x64没错,但是在淘宝NPM镜像站和官方镜像站上对应的都是win-x64 ;
进入nvmw的程序目录。
1.修改nvmw.bat文件137行,x64改为win-x64
2.修改fget.js文件47行,XMLHTTP 更改为ServerXMLHTTP
其实有现成的修改版的nvmw.bat 一下就是代码,可以留个副本;

1 @echo off  2 if not defined NVMW_HOME (  3   set "NVMW_HOME=%~dp0"  4 )  5 if not defined PATH_ORG (  6   set "PATH_ORG=%PATH%"  7 )  8 set IS64=FALSE  9 if exist "%PROGRAMFILES(X86)%" ( 10   set IS64=TRUE 11 ) 12 if %IS64% == TRUE ( 13   set OS_ARCH=x64 14 ) else ( 15   set OS_ARCH=x32 16 ) 17 if not defined NVMW_NODEJS_ORG_MIRROR ( 18   set "NVMW_NODEJS_ORG_MIRROR=https://nodejs.org/dist" 19 ) 20 if not defined NVMW_IOJS_ORG_MIRROR ( 21   set "NVMW_IOJS_ORG_MIRROR=https://iojs.org/dist" 22 ) 23 if "%1" == "install" if not "%2" == "" ( 24   call :install %2 %3 25   if not ERRORLEVEL == 1 call :use %2 %3 26   exit /b %ERRORLEVEL% 27 ) 28 if "%1" == "use" if not "%2" == "" ( 29   call :use %2 %3 30   exit /b %ERRORLEVEL% 31 ) 32 if "%1" == "ls" ( 33   call :ls 34   exit /b %ERRORLEVEL% 35 ) 36 if "%1" == "uninstall" if not "%2" == "" ( 37   call :uninstall %2 %3 38   exit /b %ERRORLEVEL% 39 ) 40 call :help 41 exit /b %ERRORLEVEL% 42 ::=========================================================== 43 :: help : Show help message 44 ::=========================================================== 45 :help 46 echo; 47 echo Node Version Manager for Windows 48 echo; 49 echo Usage: 50 echo   nvmw help                          Show this message 51 echo   nvmw install [version] [arch]      Download and install a [version] 52 echo                                        for [arch] architecture (optional) 53 echo   nvmw uninstall [version]           Uninstall a [version] 54 echo   nvmw use [version]                 Modify PATH to use [version] 55 echo   nvmw ls                            List installed versions 56 echo; 57 echo Example: 58 echo   nvmw install v0.10.21        Install a specific version number of node.js 59 echo   nvmw use v0.10.21            Use the specific version 60 echo   nvmw install iojs            Install the latest version of io.js 61 echo   nvmw install iojs-v1.0.2     Install a specific version number of io.js 62 echo   nvmw use iojs-v1.0.2         Use the specific version io.js 63 echo; 64 echo   nvmw install v0.10.35 x86    Install a 32-bit version 65 exit /b 0 66 ::=========================================================== 67 :: install : Install specified version node and npm 68 ::=========================================================== 69 :install 70 setlocal 71 set ARCH=%OS_ARCH% 72 if not "%2" == "" ( 73   set ARCH=%2 74   :: x86, ia32 alias x32 75   if "%2" == "x86" ( 76     set ARCH=x32 77   ) 78   if "%2" == "ia32" ( 79     set ARCH=x32 80   ) 81 ) 82 set NODE_TYPE=node 83 set NODE_VERSION=%1 84 :: nvmw install iojs-v1.0.2 85 if "%NODE_VERSION:~4,1%" == "-" ( 86   for /f "tokens=1,2,* delims=-" %%a in ("%NODE_VERSION%") do ( 87     set NODE_TYPE=%%a 88     set NODE_VERSION=%%b 89   ) 90 ) 91 :: nvmw install iojs 92 if %NODE_VERSION% == iojs ( 93   set NODE_TYPE=iojs 94   set NODE_VERSION=latest 95 ) 96 :: nvmw install node 97 if %NODE_VERSION% == node ( 98   set NODE_TYPE=node 99   set NODE_VERSION=latest100 )101 :: iojs-1.0.0, iojs-latest102 if not %NODE_VERSION:~0,1% == v if not %NODE_VERSION:~0,1% == l (103   set NODE_VERSION=v%NODE_VERSION%104 )105 if %NODE_TYPE% == iojs (106   set DIST_URL=%%107   if %ARCH% == x32 (108     set NODE_EXE_URL=%NVMW_IOJS_ORG_MIRROR%/%NODE_VERSION%/win-x86/iojs.exe109   ) else (110     set NODE_EXE_URL=%NVMW_IOJS_ORG_MIRROR%/%NODE_VERSION%/win-x64/iojs.exe111   )112 ) else if %NODE_VERSION:~0,1% == 0 (113   if %ARCH% == x32 (114     set NODE_EXE_URL=%NVMW_NODEJS_ORG_MIRROR%/%NODE_VERSION%/node.exe115   ) else (116     set NODE_EXE_URL=%NVMW_NODEJS_ORG_MIRROR%/%NODE_VERSION%/x64/node.exe117   )118 ) else (119   if %ARCH% == x32 (120     set NODE_EXE_URL=%NVMW_NODEJS_ORG_MIRROR%/%NODE_VERSION%/win-x86/node.exe121   ) else (122     set NODE_EXE_URL=%NVMW_NODEJS_ORG_MIRROR%/%NODE_VERSION%/win-x64/node.exe123   )124 )125 set "NODE_HOME=%NVMW_HOME%%NODE_VERSION%"126 if %NODE_TYPE% == iojs (127   set "NODE_HOME=%NVMW_HOME%%NODE_TYPE%\%NODE_VERSION%"128 )129 if not %ARCH% == %OS_ARCH% (130   set "NODE_HOME=%NODE_HOME%-%ARCH%"131 )132 set "NODE_EXE_FILE=%NODE_HOME%\%NODE_TYPE%.exe"133 set "NPM_ZIP_FILE=%NODE_HOME%\npm.zip"134 if exist "%NODE_EXE_FILE%" (135   endlocal136   echo "%NODE_TYPE%/%NODE_VERSION% (%ARCH%)" already exists, please uninstall it first137   exit /b 1138 )139 mkdir "%NODE_HOME%"140 echo Start installing %NODE_TYPE%/%NODE_VERSION% (%ARCH%) to %NODE_HOME%141 cscript //nologo "%NVMW_HOME%\fget.js" %NODE_EXE_URL% "%NODE_EXE_FILE%"142 if not exist "%NODE_EXE_FILE%" (143   echo Download %NODE_EXE_FILE% from %NODE_EXE_URL% failed144   goto install_error145 ) else (146   if %NODE_TYPE% == iojs (147     copy "%NVMW_HOME%\alias-node.cmd" "%NODE_HOME%\node.cmd"148   )149   echo Start install npm150   "%NODE_EXE_FILE%" "%NVMW_HOME%\get_npm.js" "%NODE_HOME%" "%NODE_TYPE%/%NODE_VERSION%"151   if not exist "%NPM_ZIP_FILE%" goto install_error152   set "CD_ORG=%CD%"153   %~d0154   cd "%NODE_HOME%"155   echo Start unzip "%NPM_ZIP_FILE%" to "%NODE_HOME%"156   cscript //nologo "%NVMW_HOME%\unzip.js" "%NPM_ZIP_FILE%" "%NODE_HOME%"157   mkdir "%NODE_HOME%\node_modules"158   rmdir /s /q "%NODE_HOME%\node_modules\npm"159   move npm-* "%NODE_HOME%\node_modules\npm"160   copy "%NODE_HOME%\node_modules\npm\bin\npm.cmd" "%NODE_HOME%\npm.cmd"161   cd "%CD_ORG%"162   if not exist "%NODE_HOME%\npm.cmd" goto install_error163   echo npm install ok164   echo Finished165   endlocal166   exit /b 0167 )168 :install_error169   rd /Q /S "%NODE_HOME%"170   endlocal171   exit /b 1172 ::===========================================================173 :: uninstall : Uninstall specified version174 ::===========================================================175 :uninstall176 setlocal177 set ARCH=%OS_ARCH%178 if not "%2" == "" (179   set ARCH=%2180   :: x86, ia32 alias x32181   if "%2" == "x86" (182     set ARCH=x32183   )184   if "%2" == "ia32" (185     set ARCH=x32186   )187 )188 set NODE_TYPE=node189 set NODE_VERSION=%1190 if "%NODE_VERSION:~4,1%" == "-" (191   for /f "tokens=1,2,* delims=-" %%a in ("%NODE_VERSION%") do (192     set NODE_TYPE=%%a193     set NODE_VERSION=%%b194   )195 )196 :: nvmw uninstall iojs197 if %NODE_VERSION% == iojs (198   set NODE_TYPE=iojs199   set NODE_VERSION=latest200 )201 :: nvmw uninstall node202 if %NODE_VERSION% == node (203   set NODE_TYPE=node204   set NODE_VERSION=latest205 )206 if not %NODE_VERSION:~0,1% == v if not %NODE_VERSION:~0,1% == l (207   set NODE_VERSION=v%NODE_VERSION%208 )209 if "%NVMW_CURRENT_TYPE%" == "%NODE_TYPE%" if "%NVMW_CURRENT%" == "%NODE_VERSION%" if "%NVMW_CURRENT_ARCH%" == "%ARCH%" (210   echo Cannot uninstall currently-active %NODE_TYPE%/%NODE_VERSION% %ARCH%211   exit /b 1212 )213 set "NODE_HOME=%NVMW_HOME%%NODE_VERSION%"214 if %NODE_TYPE% == iojs (215   set "NODE_HOME=%NVMW_HOME%%NODE_TYPE%\%NODE_VERSION%"216 )217 if not %ARCH% == %OS_ARCH% (218   set "NODE_HOME=%NODE_HOME%-%ARCH%"219 )220 if not exist "%NODE_HOME%" (221   echo %NODE_TYPE%/%NODE_VERSION% %ARCH% is not installed222   exit /b 1223 ) else (224   rd /Q /S "%NODE_HOME%"225   if ERRORLEVEL == 1 (226     echo Cannot uninstall %NODE_TYPE%/%NODE_VERSION% %ARCH%227     exit /b 1228   ) else (229     echo Uninstalled %NODE_TYPE%/%NODE_VERSION% %ARCH%230     endlocal231     exit /b 0232   )233 )234 ::===========================================================235 :: use : Change current version236 ::===========================================================237 :use238 setlocal239 set ARCH=%OS_ARCH%240 if not "%2" == "" (241   set ARCH=%2242   :: x86, ia32 alias x32243   if "%2" == "x86" (244     set ARCH=x32245   )246   if "%2" == "ia32" (247     set ARCH=x32248   )249 )250 set NODE_TYPE=node251 set NODE_VERSION=%1252 if "%NODE_VERSION:~4,1%" == "-" (253   for /f "tokens=1,2,* delims=-" %%a in ("%NODE_VERSION%") do (254     set NODE_TYPE=%%a255     set NODE_VERSION=%%b256   )257 )258 :: nvmw use iojs259 if %NODE_VERSION% == iojs (260   set NODE_TYPE=iojs261   set NODE_VERSION=latest262 )263 :: nvmw use node264 if %NODE_VERSION% == node (265   set NODE_TYPE=node266   set NODE_VERSION=latest267 )268 if not %NODE_VERSION:~0,1% == v if not %NODE_VERSION:~0,1% == l (269   set NODE_VERSION=v%NODE_VERSION%270 )271 set "NODE_HOME=%NVMW_HOME%%NODE_VERSION%"272 if %NODE_TYPE% == iojs (273   set "NODE_HOME=%NVMW_HOME%%NODE_TYPE%\%NODE_VERSION%"274 )275 if not %ARCH% == %OS_ARCH% (276   set "NODE_HOME=%NODE_HOME%-%ARCH%"277 )278 if not exist "%NODE_HOME%" (279   echo %NODE_TYPE%/%NODE_VERSION% is not installed280   exit /b 1281 )282 endlocal283 set NVMW_CURRENT_ARCH=%OS_ARCH%284 if not "%2" == "" (285   set NVMW_CURRENT_ARCH=%2286   :: x86, ia32 alias x32287   if "%2" == "x86" (288     set NVMW_CURRENT_ARCH=x32289   )290   if "%2" == "ia32" (291     set NVMW_CURRENT_ARCH=x32292   )293 )294 set NVMW_CURRENT_TYPE=node295 set NVMW_CURRENT=%1296 if "%NVMW_CURRENT:~4,1%" == "-" (297   for /f "tokens=1,2,* delims=-" %%a in ("%NVMW_CURRENT%") do (298     set NVMW_CURRENT_TYPE=%%a299     set NVMW_CURRENT=%%b300   )301 )302 if %NVMW_CURRENT% == iojs (303   set NVMW_CURRENT_TYPE=iojs304   set NVMW_CURRENT=latest305 )306 if %NVMW_CURRENT% == node (307   set NVMW_CURRENT_TYPE=node308   set NVMW_CURRENT=latest309 )310 if not %NVMW_CURRENT:~0,1% == v if not %NVMW_CURRENT:~0,1% == l (311   set NVMW_CURRENT=v%NVMW_CURRENT%312 )313 echo Now using %NVMW_CURRENT_TYPE% %NVMW_CURRENT% %NVMW_CURRENT_ARCH%314 set "NODE_HOME=%NVMW_HOME%%NODE_VERSION%"315 if %NVMW_CURRENT_TYPE% == iojs (316   set "NODE_HOME=%NVMW_HOME%%NODE_TYPE%\%NODE_VERSION%"317 )318 if not %NVMW_CURRENT_ARCH% == %OS_ARCH% (319   set NVMW_CURRENT_ARCH_PADDING=-%NVMW_CURRENT_ARCH%320 ) else (321   set NVMW_CURRENT_ARCH_PADDING=322 )323 if %NVMW_CURRENT_TYPE% == iojs (324   set "PATH=%NVMW_HOME%;%NVMW_HOME%%NVMW_CURRENT_TYPE%\%NVMW_CURRENT%%NVMW_CURRENT_ARCH_PADDING%;%PATH_ORG%"325   set "NODE_PATH=%NVMW_HOME%%NVMW_CURRENT_TYPE%\%NVMW_CURRENT%%NVMW_CURRENT_ARCH_PADDING%\node_modules"326 ) else (327   set "PATH=%NVMW_HOME%;%NVMW_HOME%\%NVMW_CURRENT%%NVMW_CURRENT_ARCH_PADDING%;%PATH_ORG%"328   set "NODE_PATH=%NVMW_HOME%\%NVMW_CURRENT%%NVMW_CURRENT_ARCH_PADDING%\node_modules"329 )330 exit /b 0331 ::===========================================================332 :: ls : List installed versions333 ::===========================================================334 :ls335 setlocal336 echo node:337 if exist "%NVMW_HOME%" (338   dir "%NVMW_HOME%v*" /b /ad339 )340 echo;341 echo iojs:342 if exist "%NVMW_HOME%iojs" (343   dir "%NVMW_HOME%iojs\*" /b /ad344 )345 echo;346 if not defined NVMW_CURRENT (347   set NVMW_CURRENT_V=none348 ) else (349   set NVMW_CURRENT_V=%NVMW_CURRENT%350 )351 echo Current: %NVMW_CURRENT_TYPE%/%NVMW_CURRENT_V% %NVMW_CURRENT_ARCH%352 endlocal353 exit /b 0

第四个坑:更新node到4.0及以上的时候会出现安装失败 提示 node v6.9.2 does not include npm;

办法: https://github.com/hakobera/nvmw/issues/58
https://my.oschina.net/bakuman/blog/637316
http://blog.5ibc.net/p/49266.html
按文章内容修改了nvmw.bat,然后手动下载npm-master.zip并改名为npm.zip后放到nvmw目录下新建的v4.4.0目录下,然后重新的执行 nvmw install 4.4.0,终于安装成功。(CMD执行 nvmw install 6.9.2的时候会在nvmw安装目录中生产一个对应版本的文件夹,这时候把npm.zip压缩包放进去,就能完成升级);

这样我们就可以控制nodejs的版本了,我的天,真心的麻烦~~

最后一步,我们可以使用  npm install npm -g 来获得新版的npm了;

总算大功告成,大多数的解决办法都是从网上找到的;

 

2017.02.22补充说明;

使用nvmw install 版本号  安装了之后,并不会马上转变成安装的版本,

需要使用nvmw use v6.9.2 (版本号看个人需求)进行版本的转换,install只是保存到本地供版本替换使用;

 

下面是参考链接:

http://www.tuicool.com/articles/Vzquy2 

http://blog.csdn.net/duanyachao/article/details/51822015

http://www.wtoutiao.com/p/193HWBp.html

https://segmentfault.com/a/1190000004855835

https://my.oschina.net/bakuman/blog/637316

http://blog.5ibc.net/p/49266.html

https://github.com/hakobera/nvmw/issues/58

 

好了,希望能帮到需要的同学们。

2017.01.06

 

2018.10.11

换win10的环境后安装没有这么多的麻烦了,具体参考:https://segmentfault.com/a/1190000004855835

其中第三点.修改get_npm.js文件42行路径,其实为

使用nvmw install 5.9.1安装特定版本node时,最后会提示D:\nvmw\v5.9.1\node.exe - 另一个程序正在使用此文件,进程无法访问。  

但是实质上是安装成功的

nvmw use 5.9.1 

node -v

可以查看node版本已经切换为特定版本了

 

转载于:https://www.cnblogs.com/milo-wjh/p/6255319.html

你可能感兴趣的文章
Spark 各个组件关系
查看>>
Android Studio之could not reserve enough space for object heap
查看>>
第一课 爬虫基础
查看>>
elasticsearch 遇到的坑
查看>>
MVC学习第五节 ActionResult的其它返回值
查看>>
读书笔记 - js高级程序设计 - 第十二章 DOM2和DOM3
查看>>
我为什么要区分MR和Spark的shuffle
查看>>
关于图片背景的相关注意事项
查看>>
pass
查看>>
给自己网站配置 https,http2 ,gzip压缩
查看>>
Linux发展历程
查看>>
centos7.3下curl支持https协议
查看>>
ASPCMS 标签
查看>>
《C++ Primer 4th》读书笔记 第12章-类
查看>>
Mac下搭建Apache+PHP+MySql运行环境
查看>>
WCF消息传递
查看>>
关于百度 UEditor的使用
查看>>
打开Word时出现“The setup controller has encountered a problem during install. Please ...”
查看>>
串行通讯之UARTLoopback
查看>>
习题3-4 Periodic Strings UVA - 455
查看>>