精华 【nodejs那些事儿】Nodejs && npm超灵活安装 -- Windows篇
发布于 12 年前 作者 sunshine1988 141724 次浏览 最后一次编辑是 8 年前

##摘要##

不用官网首页的msi安装NodeJS && npm
Windows下如何方便管理使用Node的多个版本
灵活安装配置,方便多台计算机直接拷贝使用

##前言## 子在两千多年以前就曾经曰过, He said, “学而不思则罔,思而不学则怠”, 所以,学习还是要经常总结的(呃,子曰的那句话是这个意思吗??)~ 因此,我打算写一个系列的关于NodeJS文章,一来记录整理一下自己学习NodeJS过程中的小心得,二来拿出来分享给大家,关于同一主题,我们可以一起讨论一下。 这个系列的文章,肯定得从基础说起,但是争取不是那么水,大牛们也别看见基础的东西就只是华丽丽滴路过,一般真知灼见都体现在基础知识上的哦~嘿嘿 所以 我只是抛砖引玉,还望大牛们不吝分享自己的相关经验!!

我的github主页sunshine1988,嘿嘿 暂时没多少干货,过几天有空了把以前写的几个东东更新上去!

##计划## 先计划一下要写的内容吧:

NodeJS && npm超灵活安装 – Windows
NodeJS && npm超灵活安装 – Linux篇
npm常用命令详解
模块安装及路径配置
国内外NodeJS资源博客、社区收集分享
Node调试工具及技巧(开发环境调试,线上调试,内存泄露调试。。。)
local module开发总结
global && CLI module开发总结
nodejs运行云服务平台总结

国外如 cloudfoundry、heroku、nodejitsu、NodeSocket,国内的当然是NAE喽,嘿嘿 不过 我还目前没有NAE的邀请码,木有试用过,国外的几个都用过了~

web框架系列。。。

哎,先想这些吧,后面还会写到关于session啊,流程控制&异步编程辅助啊,SQL客户端啊等等这些中间件模块的总结,写到那儿再说吧,反正是边学习边总结的!

##正文## 好啦,开始开天辟地第一篇~

如果在Node 0.4.x 版本以前说说Windows下的安装可能还有点讲头儿,现在人家官网都发布release版的msi文件了,还想说啥子呢?? 谁不会双击安装程序,然后无脑的一直“下一步”啊~

嗯 但是我第一次使用Node官网的msi安装,就再也不想用了! 首先,这个安装包功能上很像一个自解压包,而且“自解压“的路径还不询问你,官网文档还没有说明,第一次我安装完以后的感觉就是,我刚才做了什么,桌面上木有快捷方式,开始菜单没有启动项,这尼玛是要闹哪样啊?刚才装的Node呢??(请以一位Node初探者的身份考虑这种状况,反正遥想当年我是忍不住竖了下中指!)

废话讲了这么多,来点儿干货吧~

msi安装文件默认是安装(自解压)在Windows用户文件夹根目录底下的,以我的为例是:

C:\Users\Administrator  

会有

node/ node执行程序和npm模块
npm/ 默认的全局模块安装路径前缀
npm-cache/ npm安装模块的缓存目录,离线状态可以从这里读取方便安装
.npmrc 文本文件,存放npm的userconfig配置(后面会提到)
其他的一些相关文件或目录也会默认创建在此目录下

注:多谢@be5invis提醒,现在是默认装到Program Files\nodejs下, npm 的 repo在 %USERPROFILE%\AppData\Roaming\npm 且会自动加到系统PATH

node 和 npm 会加到 PATH 里

其实,node目录下的node.exe就是一个绿色的可执行文件,拷到哪儿都可以用~
而npm也只不过是Node的一个全局模块而已~
弄清了这俩货的本质以后,那我们就可以为所欲为喽,下面我们来看如何灵活组织node执行程序,可以方便管理,随意拷贝,又能多版本共存使用!

后来又去官网,才发现人家提供这些单独的release files,在这里选择一个版本,以现在的node-0.6.17 npm-1.1.21为例:
首先,可以建立一个wrap文件夹,以在D盘根目录为例:

d:
mkdir node
cd node

建立几个子目录:

mkdir nodejs //存放node程序和npm模块
mkdir npm-global //存放node全局模块
mkdir npm-cache //npm缓存路径

然后,我们把node.exe文件和npm-1.1.21.zip文件拷贝到nodejs目录下,解压npm压缩包到当前目录,这样会在nodejs目录下出现npm的CLI执行脚本文件npm.cmd以及node_modules目录,打开该目录会发现是npm模块的代码!
哦了,我们把D:\node\nodejs路径加到系统环境变量PATH里面,重启CMD窗口,就哦了~

验证下吧:

node -v
npm -v

想必,到这里大家也已经有多版本共存的思路了吧,既然node.exe只是个单独的可执行程序,那直接把其他版本的拷到系统路径里面不就可以了,然后以版本号为后缀改名,用的时候,直接运行特殊的node版本即可~
下面是我的这个目录的截图:
Windows下Node程序多版本管理

验证下吧:

node -v
node-0.6.15 -v

那如何配置全局模块的安装路径到node-global文件夹,npm缓存到npm-cache文件夹呢?
这个属于npm配置选项了,后面文章会再详细讲到,这里只给出方法:
很简单:

npm config set prefix "D:\node\node-global"
npm config set cache "D:\node\node-cache"

node全局模块大多数都是提供命令行访问的,所以还要把D:\node\node-global加到系统PATH里面,方面直接运行使用!!

验证下吧,装个全局模块:

npm install express -g

查看下node-globalnode-cache文件夹下是否有惊喜,嘿嘿~

这样,我们如果想把一台电脑上安装的Node程序以及相关资源(全局模块,模块缓存等)挪到其他机子上,那就把node整个目录拷贝走,然后在那台机子上按需配置下相关路径就大功告成啦,以前安装的模块缓存都有了,其他机子不上网照样可以安装模块~~
温馨提示: 缓存目录下文件会很多,所以谨慎拷贝哦~

##后话## 终于写完一篇了,万事开头难,可真难啊~~
嘿嘿 干货不多!但是希望对初学者有帮助~~
其实Windows下安装Node程序还有好多我没提到甚至我都没研究到的东西,比如说如果从源码直接编译安装,这些我还没有研究到,希望有经验的大牛牛们,有时间精力分享下~~

本文首发于CNode社区,转载请注明出处:http://cnodejs.org/topic/4fae80c02e8fb5bc650a8360

26 回复

先顶了,明天再详细看,希望楼主继续写下去!!!!!!!

嗯 我会坚持写的 敬请关注 嘿嘿~

npm不是node的一个全局模块。npm是node的一个工具。

呵呵 你可以试下:

npm install npm -g
npm view npm -g
npm uninstall npm -g

你也可以不全局安装

npm install npm
require("npm");

然后使用npm模块提供的API~~

本质上npm就是一个Node模块,只不过它推荐全局安装,然后提供CLI使用方式~
当然,你可以把它看成node的一个工具! 不过那不是本质~

刚好今晚查看npm的命令,也将nodejs及npm的默认包装转移到其它盘。想不到楼主早早发文了。比较简单方法是npm config edit,直接编辑.npmrc,里面“;"是注释,修改后保存关闭即可。

嘿嘿 是的 使用npm config set命令配置的 其实也是写到.npmrc文件中的,我理解的是这些都是userconfig, npm中有一个userconfig配置路径选项,就是配置那个.npmrc文件保存路径的,可是测试了下,userconfig值改变成功了,但npm config get相关配置,还是去原来的.npmrc文件中读的,不知道你对这个有木有研究?

windows下玩nodejs总有一些包不支持,还是在linux下玩比较爽

嗯 是的 涉及底层或者使用c扩展的一些模块 有些需要rebuild node,Windows下没有相关支持的话 就使用不了!

这不是npm的原因,而是第三方扩展包对windows不兼容。如果兼容的话,通过NPM来安装也是ok的。

这种方法不错,已经在用了,不过npm的配置文件还是不太方便

哈哈,顶一个,对新手很有帮助!

刚入门,这个操作起来方便多了

等等,官方发布的 msi 包会把 node 装到 Program Files (x86)\nodejs\ npm 的 repo 在 %USERPROFILE%\AppData\Roaming\npm

node 和 npm 会加到 PATH 里

@Jackson npm 似乎现在没有捆 dll 的功能,这些包(有 .c 的包)可以编译(利用 cmake 等,反正 node-waf 不行的),但是似乎没法用 npm 发布。

嗯 现在是装到Program Files目录下了 不过不会自动加到PATH里吧~

@be5invis 0.7里有个工具叫gyp_addon。利用gyp在windows下编译,生成.node(实际是dll,你懂的)。

@Jackson 听说在0.8中说是要干掉waf,期待中

@be5invis 嗯 谢谢 嘿嘿~ 我编辑下~

在介绍一些install module的内容就好了

请问,我npm install mongodb -g后,在任何目录下require(‘mongodb’)仍然报Cannot find moudle ‘mongodb’,是怎么回事?path环境变量确实存在,是我用错了么?总不至于每个项目我都要手动npm所有的包吧?

哈哈~成功啦!!!

要添加环境变量 NODE_PATH 到你修改后的npm_global(就是你安装全局包的路径)。

楼主,我在朝你膜拜呢。能不能把具体的使用方法在说一次呢?谢谢了!

回到顶部