npm是node中的一个模块管理器,用来安装和管理node模块,npm不需要单独安装,在安装完node会安装对应版本的npm。但是node没有升级,npm可能不是最新的,可以通过npm本身来安装自己:
npm install npm@latest -g
@后面跟的是版本号,latest表示安装最新版本,-g是全局安装。
在linux中通过man命令来查看手册,不过安装玩node后,man命令可以查到node的手册,但是查不到npm,是因为安装的是node,默认把node的man查看手册加入到了配置文件但是没有加npm。npm使用可以通过以下两个命令来查看:
npm help
npm -l //效果和man一样
初始化项目
npm init
这个命令可以加两个参数,-f(force) 强制初始化,-y(yes)跳过提问阶段,使用默认值来生成package.json。
如果不用参数,会有初始化的一些提问,包括name,version,description,entry point,test command,git,keywords,license等,最后会生成package.json文件,这个文件就是用来记录项目所用到的依赖模块,用npm安装时可以把模块名称加入到这里,发布的时候供他人使用时不需要node_modules,有这个package.json可以自行安装。
模块安装
npm install
npm install koa //默认安装最新koa模块
npm install [email protected] //安装指定版本
npm install koa --save //安装后在package.json中dependencies属性中写入安装的版本信息
npm install koa --save-dev //安装后在packag.json中devDependencies属性中写入安装版本信息
这个命令不带参数是根据当前项目的package.json安装所有的模块,当你下载别人发布的项目时,根据package.json来安装模块。
后面还可以跟模块名称来安装模块。–save安装的一般是生产环境用到的模块,可以简写为 -S,–save-dev安装的一个是测试环境
可以简写为-D。安装之后在项目跟目录下会生成一个node_modules的文件夹,这里存放安装的模块已经模块的依赖,新版npm(具体多新不清楚)
安装的时候不在是递归安装,而是平行安装,所以安装一个模块在node_modules文件里面会有一堆文件夹,这样做一是为了模块复用,二是为了
使得模块路径变短,文件名过长在windows里面无法删除。
‘离线安装’
在用户主目录下有一个.npm的目录:
npm config get cache
$HOME/.npm ,这个目录保存着大量文件,是npm intall时下载的压缩包,如果用不到可以用以下命令清空
rm -fr ~/npm/* //不建议用这个rm -fr 很危险
npm cache clean
npm install的时候只会检查本地的node_modules目录,并不会检查这个目录,这样每次安装模块都会从远程registry下载,
对于不是全局安装的模块,多个项目就会重复安装,为了解决这个npm提供了一种方式:
npm install --cache-min
本地缓存时间超过time的模块才会从registry下载,这个其实也不算是离线安装,还是需要联网对比是否需要重新下载。
如果模块不在缓存目录中,那么还是会连接registry下载最新版本,如果安装模块在缓存中,且下载版本在指定范围内,则使用
缓存模块,如果缓存版本不满足下载版本会报错。
npm查看模块信息
npm view koa
npm v koa
npm info koa
npm show koa
npm v koa version //查看koa目前的版本
npm -v //查看npm自己的版本
npm search /^req/ //search搜索npm库,后面可以用string或者正则表达式
用以上命令可以查看目前某个模块详细的信息,也可以增加参数来查看具体的信息。在更新的时候,或者需要对比版本信息的时候
就需要用到这些命令。如果要查看模块的文档可以通过 https://npmjs.org/package/模块名称 来查看,这里有介绍,
版本号,最后更新时间,模块源码链接,bug链接,README页面。也可以查看模块代码库:
npm home //打开模块的主页
npm repo //打开一个模块的代码仓库
通过上的npm可查看具体的某个模块的版本,如果要更新模块,需要查看所有本地模块和目前模块版本的对比,然后选择性更新
npm outdated //检查当前模块依赖
它会输出当前版本(current version)、应当安装的版本(wanted version)和最新发布的版本(latest version)
列出当前项目所用到的模块:
npm list
npm list -g
更新
之前提到了一个版本范围,同时在package.json里面也会看到 ~,^,* 等符号,package.json中的版本:大版本.次要版本.小版本
- 指定版本:比如1.2.2
- 波浪号+版本:比如~1.2.2 ,安装1.2.x最新的版本(不低于1.2.2),但不要安装1.3.x,安装时不改变大版本和次要版本
- 插入号+版本:比如^1.2.2 ,安装1.x.x最新的版本(不低于1.2.2),但不要安装2.x.x,安装不改变大版本号。
- latest:安装最新的版本
知道了模块信息和版本,可以选择更新,也可以全部更新
npm update package //更新指定模块
npm update package -g //全局更新
有时候可能更新不成功,可能于版本有关,不过不用去纠结,可以安装指定最新的版本,或者卸载现在的模块重新安装
npm uninstall package //卸载指定模块
npm uninstall package -g //下载全局安装的模块
配置
大家可能遇到过这样的情况,用npm安装一个模块的时候会出现超时的错误,或者说在公司内网,由于防火墙的限制无法安装
这时候就需要对npm做一下简单的配置。
之前我们提到在主目录下有一个 .npm 的缓存目录,其实在主目录下还有一个npm的配置文件 .npmrc
npm config list [-l] //查看npm的配置
npm config edit //编辑npm的配置,当然也可以直接编辑~/.npmrc
在这个配置文件中有很多信息, npm init 的时候也是根据这个文件来初始化的。打开这个配置文件,一般会看到
save-exact = true ,这个配置是在安装模块写入package.json的时候是确定的版本,不是版本范围。
npm config set init.author.name
npm config set init.author.email
上面设置的作者和邮箱,在配置文件中是可以看到的,同时初始化的时候会默认用这两个参数。一般全局安装的模块是
/usr/local/lib/,这个一般用户没有权限写入,可以设置一个模块的全局安装目录让普通用户也有写入的权限。
npm config set prefix
回到开始提到的无法安装模块的问题,这时需要设置一个代理或者搭建镜像
npm config set proxy https://proxy.com/ //设置设置的代理是公司自己的代理
npm config set registry https://registry.npm.taobao.org //这里用的是淘宝的镜像
设置这些后一般情况是可以正常下载的,不过在publish的时候需要删掉。或者有一个模块 cnpm 也可以从国内源下载模块。
最后说一点,在package.json中有一个script的字段,这里设置了可以执行的脚本。里面是的key,可以通过
npm run
来执行,例如:
"scripts": {
"test": "mocha --harmony test"
}
npm run test //执行脚本
等同于 npm mocha –harmony test。
参考:
http://javascript.ruanyifeng.com/nodejs/npm.html
http://www.ruanyifeng.com/blog/2016/01/npm-install.html
https://github.com/ericdum/mujiang.info/issues/6/
http://www.cnblogs.com/jingmoxukong/p/6228358.html