网上搜了很多文章但是感觉都不好,自己写一个:
此文仅针对win10下安装node,版本为v8.11.0;
node下载地址选择对应版本
一般选稳定版64位.msi
如果之前装过node,安装之前最好先手动删除相关环境变量,和相关node_modules文件夹。
下载后的安装包首先取得管理员所有权
网上很多教程都会全部点下一步,其实新版node似乎?是自带配置PATH功能的:
自己选路径,我选的是D:\nodejs\
安装时选Add to Path
然后各种下一步,直至finish.
完成之后,我们查看环境变量:
控制面板>系统>高级系统设置>环境变量>
就能发现他已经帮我们配置好了?环境变量..
其中后者是设置在roaming的,貌似是如果和其他用户公用设备会产生一些问题,不太懂,相关可以阅读npm官方文档。
这里我就开始很疑惑了,网上找的配置node环境变量的文章,为什么都是配一个node_global或者node_modules的东西?而没有这个npm的东西。
而当用npm install一些包之后,有全局安装和本地安装,那么nodejs下有node_modules,appdata下也有node_modules,两者有什么区别呢?还需要做什么配置吗?
鉴于msi安装时的配置,一个是系统的环境变量,一个是当前用户(我是administrator),
环境变量的有两种,一种是系统环境变量,另一种是用户环境变量。系统环境变量的设定对所有用户都起作用,而用户环境变量只对当前用户起作用。
“当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下寻找此程序外,还会到系统的环境变量path和用户的环境
变量path中指定的路径去找。(系统的环境变量优先)”
是否,取得管理员权限时会调用前者,否则会调用后者,而windows貌似是非常容易不知道搞没搞到权限的?
结合网上的配置文章,在未找到相关资料的情况下,我作如下推测:
默认情况下,npm和Node一起装在C:\Program Files (x86)\nodejs
,以下简称%Program%
;
而包括npm自己和他全局安装的包(cnpm..etc)是装在另一个user-specific路径的C:\Users\<username>\AppData\Roaming\npm
,以下简称%Appdata%
因为在环境变量中,安装程序把%Program%
放在%Appdata%
前面,他会一直使用和node装一起的npm,而不是你安装的npm -g install npm@<version>
。
????
从npm的wiki中关于windows中npm更新,我们可以了解到:
可下载win下npm更新软件
解决的思路就是只选一个,前两种是删%Program%
有三种可选解决方法,步骤a如下:
选择1.环境变量中把%Appdata%\npm
放%Program%\nodejs
前面,每次配置完环境变量或者安装npm需要重启cmd.exe,可能windows也要重启。
选择2.将两者都删除:%Program%\nodejs\npm
%Program%\nodejs\npm.cmd
选择3.在%Program%\nodejs\node_modules\npm'文件夹下,复制
npmrc`文件至另一个文件夹或桌面,然后打开cmd.exe,输入下面命令:
cd %ProgramFiles%\nodejs
npm install npm@latest
如果你是使用Node.js安装程序,在完成上述步骤a的一种后,做步骤b:
选择1或2.把npmrc从%Program%\nodejs\node_modules\npm'复制出来黏贴到
%appdata%npmnode_modulesnpm`
https://en.wikipedia.org/wiki...
关于环境变量,在windows系统上,地址之间使用;
分开的。当在命令行输入命令,执行一个程序的时候,系统会现在本地路径搜索,然后就会去环境变量中寻找,在PATH
中从左到右寻找可执行的文件名.EXE
或.COM
,或是BAT
,CMD
。
npm使用$APPDATAnpm来保证非管理员也能写和存储全局包。如果这个路径不存在,创建他需要管理员权限,npm -g install就无法运行
Windows installer doesn't ensure that $USERNAMEAppDataRoaming exists
(其实有一种方法使用nvm管理Nodejs的版本,但是我感觉nvm非常黑魔法,我不会用,有卸载图为证,反正有阴影了,不想碰)
但是并不排除以上问题,并非nvm,而是一直被人诟病的“npm是屎一样的存在,node是翔一样的存在,两者合二为一,啪啪啪啪..”??
事实上用命令行安装更好?可以有相关安装log如果报错可以知道?
详细参见某目录下工作人员回复?忘了在哪看过的了...
敢兴趣可以搜一下...
可是怎么获得命令行的管理员权限?
linux/ios下可以sudu blablabla
为什么 npm 要为每个项目单独安装一遍 node_modules?
脑壳疼 有空再纠结了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。