什么是包管理工具
包管理工具其实就是对一些程序包进行安装、升级、卸载的管理工具。程序员在编程的时候常常会用到一些工具,类似于我们在电脑上安装一些软件。这些工具或者一些源码包都是通过命令行来下载安装使用的。所以就需要一个管理工具对这些安装包进行管理。
在系统层面,我们进行开发时需要给系统安装一些环境,或者开发工具之类的,就会需要用到一些依赖包。一般系统都会内置这些包管理工具,比如Red hat有yum
,Ubuntu有apt-get
,Mac OS有Homebrew
。
又比如我们进行程序开发时常常会依赖第三方的包,所以也会有包管理工具进行管理。如iOS第三方库管理工具:cocopods
,安卓有gradle
,java有Maven
。
node也有自己的包管理工具,最为一个前端新人,刚开始对node相关的各种包管理工具会比较混乱,因为这类工具挺多的,如npm、nrm、nvm、n。还有对应的安装路径,镜像源等。所以这里对这些工具做一个简单梳理和介绍。首先我们要弄清楚npm、nrm、nvm、n、node之间的关系。我是在Mac OS上进行使用的,所以相关的还要加上Homebrew。
什么是Node.js
Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。Node.js由Node.js基金会持有和维护,并与Linux基金会有合作关系。Node.js采用Google开发的V8运行代码,使用事件驱动、非阻塞和异步输入输出模型等技术来提高性能,可优化应用程序的传输量和规模。这些技术通常用于数据密集的事实应用程序。
以上解释来自维基百科,简单的说Node.js就是基于V8引擎的JavaScript运行环境。用于开发服务端应用。
安装Node.js环境(HomeBrew)
在Mac上我们安装Node.js环境使用HomeBrew。
brew link node
brew uninstall node
brew install node
安装好了之后我们输入which node
能看到软链接的路径为/usr/local/bin/node
。
然后输入readlink /usr/local/bin/node
读取软链接对应的相对路径为../Cellar/node/8.2.1/bin/node
。即绝对路径/usr/local/Cellar/node/8.2.1/bin/node
。这就是安装的node 8.2.1版本环境所在的路径。
管理Node.js版本(nvm)
因为有时候需要时常对node版本进行切换测试兼容性和一些模块对node版本的限制。所以需要一个工具对node的版本进行管理。一般目前主流的node版本管理工具有两种nvm
和n
。
管理 node 版本,选择 nvm 还是 n?这篇文章对nvm
和n
的选择和优劣进行了解释。
我这里使用nvm
进行管理Node.js版本。可以nvm git地址里查看使用,或者安装完成后输入nvm
直接列出所有的使用命令。
下载nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
配置环境变量
完成后nvm就被安装在了/.nvm下啦,接下来就需要配一下环境变量了,我使用的是`zsh`,所以打开/.zshrc,在最后一行加上:
export NVM_DIR="/Users/dasheng/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
这一步的作用是每次新打开一个bash,nvm都会被自动添加到环境变量中了。
完成后输入source ~/.zshrc
重新启动一下配置。
安装对应版本的node
nvm install v8.2.1
当前使用的node软链接路径
which node
我们能看到当前的路径就变成了/Users/dasheng/.nvm/versions/node/v8.2.1/bin/node
查看当前node版本
nvm version
或
node -v
查看安装的所有node版本
nvm ls
比如我这里安装了多个版本v8.2.1
、v7.10.0
、v8.2.0
。nvm默认会使用你最新安装的那个版本。比如我这里最后安装的是v8.2.0
,那使用nvm version
查看当前的node版本就是v8.2.0
。
切换node版本
nvm use v7.10.0
NodeJS包管理和分发工具(npm)
npm介绍
我们上面是安装好了node的基本环境,但是我们平时会使用到一些第三方的node模块,这时就要包管理工具对这些模块进行下载使用了。
NPM的全称是Node Package Manager
,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。
新版的node默认就会带有npm,npm和那些第三方的模块都默认安装在node对应版本的/lib/node_modules
目录下。比如我使用npm安装es6-promise和ksend。
npm install es6-promise -g
npm install ksend -g
这里包的安装分为本地安装和全局安装:
npm install es6-promise # 本地安装
npm install es6-promise -g # 全局安装
全局安装就是安装在如上图所示的node当前版本对应的node_modules
中。
本地安装
本地安装是安装在当前所在文件夹的node_modules
,同时当前文件夹需要有一个package.json
。比如我在test文件夹中创建package.json
文件。内容如下:
{
"name": "test",
"version": "0.0.1",
"private": true
}
然后在test目录下运行npm install es6-promise
。这个es6-promise
就会被安装在这个test目录下的node_modules
。同时package.json
内容也会相应自动的改变:
{
"name": "test",
"version": "0.0.1",
"private": true,
"dependencies": {
"es6-promise": "^4.1.1"
}
}
其实我们可以把test也当成一个node的第三方包,然后他有一个package.json
文件,里面描述了这个包的作用、作者、地址、以及这个包所依赖的包等。
所以只要有这个package.json
,在dependencies
里写上所依赖的包,运行npm install
,就会把所有依赖的包安装在test/node_modules
目录下了。
相关文章
npm 模块安装机制简介这篇文章是对npm的机制的介绍。
关于npm的使用可以看NPM 使用介绍。
NPM源管理器(nrm)
npm默认的源是https://registry.npmjs.org/
,国内下载安装一些依赖包的时候会特别慢。所以一般会使用一些国内的镜像源,很多都是使用的淘宝的镜像源https://registry.npm.taobao.org
。而为了管理切换这些镜像源就有了nrm
。
安装
npm install -g nrm
列出所有的源
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 add taobao https://registry.npm.taobao.org/
切换源
nrm use taobao
删除源
nrm del taobao
测试速度
nrm test
参考文章
管理 node 版本,选择 nvm 还是 n?
node版本管理工具nvm-Mac下安装及使用
npm配置镜像、设置代理