02. NPM 介绍
简介
NPM 是随同 NodeJS 一起安装的包管理工具,能解决 NodeJS 代码部署上的很多问题,常见的使用场景有以下几种:
- 允许用户从 NPM 服务器下载别人编写的第三方包到本地使用。
- 允许用户从 NPM 服务器下载并安装别人编写的命令行程序到本地使用。
- 允许用户将自己编写的包或命令行程序上传到 NPM 服务器供别人使用。
由于新版的 nodejs 已经集成了 npm,所以之前 NPM 也一并安装好了。同样可以通过输入npm -v
来测试是否成功安装。命令如下,出现版本提示表示安装成功:
1 | npm -v |
如果你遇到 npm WARN npm npm does not support Node.js vx.x.x
的错误 或者 单纯想升级 npm,可以键入一下命令:
1 | npm install -g npm |
使用 npm 命令安装模块
npm 安装 Node.js 模块语法格式如下:
1 | npm install <Module Name> |
全局安装与本地安装
npm 的包安装分为本地安装(local)、全局安装(global)两种,差别只是有没有 -g
而已,比如
1 | # 本地安装 |
本地安装
- 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
- 可以通过 require() 来引入本地安装的包。
全局安装
- 将安装包放在 /usr/local 下或者你 node 的安装目录。
- 可以直接在命令行里使用。
如果你希望具备两者功能,则需要在两个地方安装它 或 使用 npm link
命令。
查看安装信息
npm list -g
查看所有全局安装的模块
npm list grunt
如果要查看某个模块的版本号
npm search express
搜索模块
1 | npm show express # 显示模块详情 |
update 命令
1 | npm update # 升级当前目录下的项目的所有模块 |
npm uninstall express
卸载模块
创建并发布 npm 模块
创建模块,package.json 文件是必不可少的。我们可以使用 NPM 生成 package.json 文件,生成的文件包含了基本的结果。
npm init
接下来我们可以使用以下命令在 npm 资源库中注册用户(使用邮箱注册):
npm adduser
注:登录后可以通过 npm whoami
查看当前用户:
接下来我们就用以下命令来发布模块:
npm publish
发布成功后可以去官网你的账号看看结果或者直接 npm 下载下来。
使用 package.json
package.json 位于模块的目录下,用于定义包的属性。接下来让我们来看下 express 包的 package.json 文件,位于 node_modules/express/package.json 内容:
1 | { |
Package.json 属性说明
- name - 包名。
- version - 包的版本号。
- description - 包的描述。
- homepage - 包的官网 url 。
- author - 包的作者姓名。
- contributors - 包的其他贡献者姓名。
- dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
- repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
- main - main 字段指定了程序的主入口文件,require(‘moduleName’) 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。
- keywords - 关键字
NPM 常用命令
NPM 提供了很多命令,例如 install 和 publish,使用 npm help 可查看所有命令。
使用 npm help <command>
可查看某条命令的详细帮助,例如 npm help install。
在 package.json 所在目录下使用 npm install . -g
可先在本地安装当前命令行程序,可用于发布前的本地测试。
使用 npm update <package>
可以把当前目录下 node_modules 子目录里边的对应模块更新至最新版本。
使用 npm update <package> -g
可以把全局安装的对应命令行程序更新至最新版。
使用 npm cache clear
可以清空 NPM 本地缓存,用于对付使用相同版本号发布新版本代码的人。
使用 npm unpublish <package>@<version>
可以撤销发布自己发布过的某个版本代码。
使用淘宝 NPM 镜像
大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像。
淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10 分钟 一次以保证尽量与官方服务同步。
你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
npm install -g cnpm --registry=https://registry.npm.taobao.org
这样就可以使用 cnpm 命令来安装模块了:
cnpm install [name]
cnpm 支持 npm 除了 publish 之外的所有命令
npm 开启代理
1 | npm config set http-proxy http://10.5.3.9 --global |
取消代理
1 | npm config delete proxy |
报错
npm ERR! cb.apply is not a function
可以尝试以下两种解决方式
方法 1
1、win + r 打开运行,输入 %appdata%
2、删除 npm 和 npmcache 文件夹
3、执行 npm cache clean --force
命令
此时应该就可以了,如果还不行,可以试试方法 2
方法 2
1、win + r 打开运行,输入%appdata%
2、删除 npm 和 npmcache 文件夹
3、执行 npm cache clean --force 命令
4、卸载 Node.js
5、重新安装 Node.js
解决方式参考自:
https://github.com/nodejs/help/issues/2874#issuecomment-663661148
使用 node 升级 npm
1 | sudo npm install n -g |
n 是一个 Node 工具包,它提供了几个升级命令参数:
n 显示已安装的 Node 版本
n latest 安装最新版本 Node
n stable 安装最新稳定版 Node
n lts 安装最新长期维护版(lts)Node
n version 根据提供的版本号安装 Node
require 模块找不到的问题
另一种是添加环境变量 NODE_PATH,值就设置成全局安装路径 C:\Users\zhangsan\AppData\Roaming\npm\node_modules
。
npm 镜像加速 / 换源
1.临时使用
1 | npm --registry --registry=https://registry.npmmirror.com install express |
2.持久使用
1 | npm config set registry https://registry.npmmirror.com |
换源后可以进行查看
1 | npm config get registry |
pm2 的使用
pm2 start app.js --name=“api”
启动应用程序并命名为 “api”
启动应用程序并指定参数并命名,这里用了双引号
简单示例
1 | pm2 start "node airSensor.js 192.168.18.107 WeatherSensor1" --name weather2 |
详细示例
1 | // 基地气象1 WeatherSensor1 |
停止所有服务
pm2 stop all
停止指定服务
pm2 stop zhangsan
参考
NPM 使用介绍 | 菜鸟教程
https://www.runoob.com/nodejs/nodejs-npm.html