哈喽小伙伴们,新的专栏 Node已开启;这个专栏里边会收录一些Node的基础知识和项目实战;今天我们开始这个专栏的第二篇文章,带领大家初识一下NPM;让我们一起来看看吧
Node Package Manager 简称NPM,是Node.js的包管理器。Node本身提供了一些基本API模块,但是这些基本模块难以满足开发者需求。Node需要通过使用NPM来管理开发者自我研发的一些模块,并使其能够共用与其他开发者。简单来说,NPM就是Node.js的包管理器。
Nodejs已经集成安装了npm,可以通过输入 npm -v
来测试是否成功安装。命令如下,出现版本提示表示安装成功:
$ npm -version
2.15.8
升级更新NPM
$ sudo npm install npm -g
序号 | 命令 | 描述 |
---|---|---|
1 | npm -v | 显示版本,检查npm 是否正确安装。 |
2 | npm install express | 安装express模块 |
3 | npm install -g express | 全局安装express模块 |
4 | npm uninstall express | 卸载指定的模块 |
5 | npm link express | 把全局目录下的express模块链接到本地的node_modules下 |
6 | npm list | 列出已安装模块 |
7 | npm search express | 搜索指定的NPM包 |
8 | npm show express | 显示模块详情 |
9 | npm update | 升级当前目录下的项目的所有模块 |
10 | npm update express | 升级当前目录下的项目的指定模块 |
11 | npm update -g express | 升级全局安装的express模块 |
12 | npm init | 通过向导的方式生成package.json文件 |
13 | npm adduser | 添加用户 在npm官网注册的账号 |
14 | npm publish . | 可以发布自己制作的包到NPM服务器 |
15 | npm unpublish <包名>@<版本号> | 可以撤销发布自己发布过的某个版本包。 |
有一个简单安装任何Node.js模块,语法如下:
$ npm install <Module Name>
例如,下面是安装一个著名的Node.jsweb框架模块的命令叫 express:
$ npm install express
现在,你可以在js文件中使用此模块如下:
var express = require('express');
NPM建立了一个NodeJS生态圈,NodeJS开发者和用户可以在里边互通有无。
当你需要下载第三方包时,首先要知道有哪些包可用。npmjs.com提供了可以根据包名来搜索的平台,但是如果不知道包名可以百度一下。知道了包名后,就可以使用命令去安装了,例如:Express
npm install express
下载完成之后,express包就放在了工程目录下的node_modules
目录中,在代码中只需要通过reuqire('express')
的方式去引用,无需指定包路径。
以上命令默认下载最新版本第三方包,如果要下载指定版本,可以在包名后面追加@
,例如通过如下命令可以下载0.0.1版本的express。
npm install express@0.0.1
如果使用到的第三方包比较多,在终端下一个包一条命令的安装非常不方便,因此NPM对package.json
的字段做了扩展,允许在其中添加三方包依赖。
npm install express --save
{
"name":"test",
"main":"./lib/main.js",
"dependencies":{
"express":"3.2.1"
}
}
这样处理后,在工程目录下就可以使用npm install
命令批量安装三包了。最重要的是,当以后吧test
项目上传到了NPM服务器,别人下载这个包时,NPM会根据包中声明的三方依赖包进行自动下载依赖。这样用户只需要关心要使用的包,不用管其依赖的三方包。
默认情况下,NPM安装指定包默认会安装到本地。本地安装指的是包安装在当前目录中node_modules文件夹中。本地安装的包都可以通过require()方法进行访问。例如我们安装Express模块:
$ npm install express
列出所有本地安装的模块
$ npm ls
本地安装request模块:
npm install request
在实际工作中,安装包时可能需要指定包的版本号,命令格式如下:
npm install <包名>@<版本号>
例如,安装2.44版本的request模块:
npm install request@2.44
也可以使用版本号范围,安装某一版本范围的包版本。比如,安装版本号前缀为2.4的版本的request模块:
npm install request@2.4.x
可以通过以下命令,安装版本号大于2.0的request模块:
npm install request@">2.0"
还可以使用如下命令组合,安装指定范围的版本号的包:
npm install request@">=2.0 <2.5"
全局安装包都存储在系统目录中。我们可以在nodejs的CLI(命令行界面)使用,但是不能直接使用require()方法进行访问。例如安装http-server包:
//全局安装 -g
$ npm install -g http-server
//使用node CLI
$ http-server
查看部分npm默认设置
npm config ls
查看全部npm默认设置
npm config ls -l
npm包全局安装目录:
C:\Users\Administrator\AppData\Roaming\npm
/usr/local/lib/node_modules
修改全局模块安装路径
npm config set prefix "D:\install\node\node_global"
npm config set cache"D:\install\node\node_cache"
使用下面的命令卸载Node.js模块
npm uninstall express
更加package.json并更新
npm update express
搜索使用NPM包名
npm search express
第一次使用NPM发布自己的包需要在npmjs.com注册一个账号
npm adduser # 添加用户 在npm官网注册的账号
Username: allcky # 用户名
Password: # 密码
Email: (this IS public) allcky@qq.com
npm publish . # 可以发布自己制作的包到NPM服务器
npm unpublish <包名>@<版本号> # 可以撤销发布自己发布过的某个版本包。
npm全称Node Package Manager,是node.js的模块依赖管理工具。由于npm的源在国外,所以国内用户使用起来各种不方便。下面整理出了一部分国内优秀的npm镜像资源,国内用户可以选择使用。
nrm 是一个管理 npm 源的工具。用过 ruby 和 gem 的同学会比较熟悉,通常我们会把 gem 源切到国内的淘宝镜像,这样在安装和更新一些包的时候比较快。nrm 同理,用来切换官方 npm 源和国内的 npm 源(如: cnpm),当然也可以用来切换官方 npm 源和公司私有 npm 源。
包名 | 网址 |
---|---|
nrm | http://www.cnblogs.com/songqingbo/articles/5611588.html |
npm i nrm -g
查看当前 nrm 内置的几个 npm 源的地址:
# nrm ls
结果如下:
npm ---- https://registry.npmjs.org/
cnpm --- http://r.cnpmjs.org/
* taobao - https://registry.npm.taobao.org/
nj ----- https://registry.nodejitsu.com/
rednpm - http://registry.mirror.cqupt.edu.cn/
npmMirror https://skimdb.npmjs.com/registry/
edunpm - http://registry.enpmjs.org/
nrm use npm
nrm add <registry> <url> [home]
nrm del <registry>
nrm test
淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
$ npm install -g cnpm
这样就可以使用 cnpm 命令来安装模块了:
$ cnpm install [模块名]
直接通过 sync 命令马上同步一个模块, 只有 cnpm 命令行才有此功能:
cnpm sync [模块名]
支持 npm 除了 publish 之外的所有命令, 如:
$ cnpm info [模块名]
更多Node知识以及API请大家持续关注,尽请期待。各位小伙伴让我们 let’s be prepared at all times!
✨原创不易,还希望各位大佬支持一下!
点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!