nodejs安装过程中环境变量配置的问题
基本知识:
- 命令行工具是运行在当前计算机用户下的,所以开头总是C:\Users\XXX>,而不会跟你的nodejs安装的位置有关。
- 安装node后,在cmd里有两种模式,开发模式和命令行模式,要进入开发模式直接输入node回车即可,此时可以输入代码,比如require ("express"),如果直接在命令行模式下输入require类的语句是会报错的,提示'require'不是内部或外部命令,也不是可运行的程序或批处理文件。从开发模式退出可用.exit命令也可以用快捷捷,ctrl+D或两次ctrl+C.
环境变量配置:
- 首先在安装目录下新建两个文件夹,分别为node_global和node_cache,前者用来安装express,在全局模式下安装,就能共享到所有磁盘。
- 然后在nodejs安装目录里npm文件夹下找到npmrc,打开此文件编辑将内容改写为prefix=D:\Program Files\nodejs\node_global,cache = D:\Program Files\nodejs\node_global。直接在cmd下运行npm config set cache "D:\nodejs\node_cache",npm config set prefix "D:\nodejs\node_global"设置不了全局环境,不知道为什么。
- 右键我的电脑在属性里找到环境变量配置,在用户变量和系统变量下分别新增NODE_PATH变量,路径为D:\Program Files\nodejs\node_global\node_modules。记住系统变量里路径为D:\Program Files\nodejs,千万别改成跟上面一样的,不然连node命令都识别不了了,因为你的npm安装在nodejs里,而不是在node_global里。可以总结为一句话:NODE_PATH和path的路径用户变量和系统变量分别保持一致,NODE_PATH要细化到全局模块下而path不需要。
- 接着在命令行里运行npm install express -g,安装express框架。安装完成会看到第一行的安装目录是你设置好的node_global路径,如果是一大段C盘开头的路径什么appdata那就是环境变量没配置好,用户变量和系统变量是否完全匹配?
- 接着在开发模式下输入require ("express"),如果没有报错就证明成功了,还可以试试别的命令比如require ("http")。
运行js文件:
- 目前总是不成功,提示module.js:471,抛出错误,无法找到模块之类的。
-
按照这个链接里给的方法,我查看了下路径。上面的是全局模块的安装路径,下面是全局模块的默认搜索路径。
-
我尝试把环境变量中用户变量和系统变量的path和NODE_PATH都设置成D:\Program Files\nodejs\node_global\node_modules,然后发现连node -v指令都报错了,node不是有效命令。我把系统变量的路径改回D:\Program Files\nodejs就没问题了。但是执行js文件还是不行。无论放在D盘的哪个位置都访问不到,放到C盘C:\Users\Administrator.USER-20160312BT目录下面就可以,也不用关了cmd重启,只要复制到该目录下立马就可以了。
-
其实从第1条抛出的错误也能看出来,它是在C:\Users\Administrator.USER-20160312BT这个目录下找不到模块test.js,test.js就是要加载的模块?所以只要把文件放到这个目录下面就可以访问到了。
- 另外我如果换一种访问不用node命令来访问,而是在开发模式下用require加载的话test.js文件就必须放在node_global文件夹下面才能被访问,放在C盘用户目录下都不行。
- 对于3,4,5,我这时环境变量的配置是两个变量的path路径都只到nodejs,而NODE_PATH都是到全局模块下的。
- 综合以上测试,要么就把项目放在全局模块的文件夹下,要么就放在C盘用户目录下,前者只能用require加载,后者只能用node命令行加载(最新测试显示可以用require('./test.js')加载,但是不能项目全放在C盘里吧)。真是尴尬,也不知道是啥原因。先这样吧。
- 最新发现,亲测可用。。我尝试cd d:\Program Files\nodejs\node_global\node_modules,发现不可行,这应该是因为命令行没法识别Program Files中间的空格,直接被拆开了,所以找不到这样一个文件夹,而我换成一个没有空格的F盘的文件夹,然后把test.js文件复制进去,然后cd到这个文件夹,用 node test.js访问就行了。。
-
所以解决办法就是你把项目放在哪儿都行,但是要访问的时候记得先cd命令定位到该文件夹(也可以直接node f:/DW/test.js),文件夹名注意不要有空格,可以用下划线代替,然后就可以node访问啦!至于用require访问,就更简单了,记得在文件名前加.\就可以啦,OVER。参考链接