npm
npm 全称为 node package manager,即 node 包管理。
- 所谓的包,是多个文件的集合。
npm 包分为全局包、本地包。
-
全局包(不能在代码中使用 只能在命令中使用) 、 本地包(只能在当前项目中使用)
-
全局包的安装命令为
npm i xxx -g
-
本地包的安装命令为
npm i xxx --save-dev/--save
-D 为 --save-dev 的简写,-S 为 --save 的简写
-D 指开发依赖,如 babel 等,主要作用是编译代码,-S 为项目依赖,为项目提供支持,如 react
nrm
nrm 全称为 npm registry manager,即 npm 的镜像源管理工具。
- 它是一个 npm 全局包
- 使用这个工具我们可以在不同的 npm 源间切换,便于选择网络较快的下载源。
nrm 下载命令为 npm i nrm -g
mac 下需要在命令前加 sudo
我们可以通过 nrm --help
命令来查看 nrm 的相关命令:
使用 nrm ls
来查看当前可用的 npm
源
使用 nrm test
来测试当前各个源下的网速
使用 nrm current
来查看当前自己使用的 npm
源
使用 nrm use xx
来切换自己的下载源
node 版本管理
常用的 node 版本工具有两个:
- nvm
- n
他们的区别大致可以分为一下几点:
1、安装方式:
n
是一个需要全局安装的npm
包,因此在使用n
之前,你必须已经安装了node
。- 而 nvm 则是一个独立的软件包,我们需要单独使用它的安装逻辑:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash
2、node 管理方式
n
会先将指定版本的node
存储下来,然后将其复制到我们熟知的路径/usr/local/bin
,非常简单明了。当然由于 n 会操作到非用户目录,所以需要加sudo
来执行命令。nvm
将不同的node
版本存储到~/.nvm/<version>/
下,然后修改$PATH
,将指定版本的node
路径加入,这样我们调用的node
命令即是使用指定版本的node
。- nvm 不依赖 node 环境,是 node 依赖 nvm,而不像 n 那样产生类似循环依赖的问题
3、对全局模块的管理。
- n 对全局模块毫无作为,因此有可能在切换了 node 版本后发生全局模块执行出错的问题
- nvm 的全局模块存在于各自版本的沙箱中,切换版本后需要重新安装,不同版本间也不存在任何冲突。
4、系统支持
- nvm 不支持 Windows
发布自己的 npm 包
全局包
1、新建文件夹 my-npm
,并通过 npm init
初始化项目
- npm init -y 可默认所有配置
2、新建 bin
目录,并在 package.json
中新增 bin
配置项
// my-npm/bin/index.js
#! /usr/bin/env node // 声明运行环境为 node
require('../index');
console.log('my-npm')
package.json
"bin": {
"my-npm": "./bin/index.js"
},
3、cd 到 my-npm 目录下,运行 npm link
命令

右上图我们可知,在执行 npm link
命令后,系统在新增了 /usr/local/bin
目录下新增了 my-npm
命令,该命令的实际文件地址指向 /Users/mac/Desktop/zf/node/my-npm
,即我们新建的项目。
此时,输入 my-npm
命令,即可执行我们新建的全局命令,打印出文件的内容。
4、可通过 npm unlink
来删除该命令

删除命令后,my-npm
则失效。
发包
1、注册npm 账号
2、进入项目目录,登陆 npm 账号
$ npm adduser
Username:
Password:
Email:
如下图:

3、上传
npm publish
若包名已经存在,则会抛错:

若包名和已经存在的包名相似,则抛出以下错误:

提示我们可以在包名前加上作用域,修改包名后继续提交:

版本号
我们可以使用 npm version xx
命令来修改 npm 包的版本号,具体参数可以通过 --help
来获得:
