一、什么是 npm
全称:Node Package Manager
npm 是一个 随 node 一起安装的 node包管理 和 分发工具
通过npm命令可以实现nodejs模块的安装与卸载
二、npm 使用场景
(1)允许用户从npm服务器:下载 第三方包 到本地
(2)允许用户从npm服务器:下载 并 安装 别人编写的 命令行程序 到本地
(3)允许用户:将自己编写的 npm包 或 命令行程序 上传到npm服务器
三、npm 基础命令
- npm是和Node.js一起发布的,只要安装了Node.js,npm也安装好了
1. 检测 npm 是否安装成功
- 命令:
npm -v
2. 更新 npm
- 命令:
npm install npm -g
3. 查看 当前包安装目录
- 命令:
npm root
4. 查看 全局包安装目录
- 命令:
npm root -g
四、使用 npm 安装模块
1. 本地安装
命令:
npm install <Module Name>
安装模块 最新版本,不记录在 package.json 中命令:
npm install <Module Name>@版本号
安装模块 指定版本,不记录在 package.json 中命令:
npm install 模块名 --save
安装模块 最新版本,记录在 package.json 的生产环境中命令:
npm install 模块名 --save-dev
安装模块 最新版本,记录在 package.json 的开发环境中安装细节:
(1)上述安装命令,会将 安装包放在
./node_modules
下;如果没有node_modules
目录,会在当前执行 npm 命令的目录下生成node_modules
文件夹(2)安装之前 会检查:
node_module
中是否已经存在 要安装的模块如果 本地存在 即使 不是最新版本 也不再安装了
如果需要 强制安装:
npm install 模块名 --force
2. 全局安装
命令:
npm install <Module Name> -g
将安装包放在
/usr/local/lib/node_modules
下或者你 node 的安装目录全局包:可以直接在命令行里使用;但不建议安装全局包
3. 查看 模块 版本
前提: 需要在
node_modules
同级目录下 执行如下命令,才能查看 模块的版本号命令:
npm list <Module Name>
4. 更新 模块
前提: 需要在
node_modules
同级目录下 执行如下命令,才能更新 模块命令:
npm update <Module Name>
命令:
npm update <Module Name> -g
更新全局中指定模块
5. 卸载 / 移除 模块
前提: 需要在
node_modules
同级目录下 执行如下命令,才能卸载 模块命令:
npm uninstall <Module Name>
卸载模块,不删除 package.json 中的记录命令:
npm uninstall 模块名 --save
卸载模块,删除 package.json 生产环境中的记录命令:
npm uninstall 模块名 --save-dev
卸载模块,删除 package.json 开发环境中的记录移除命令:
npm remove -g 模块名
全局卸载模块
五、创建 模块 / 项目
1. 初始化项目 命令
命令:
npm init
执行该命令,会自动生成
package.json
文件
2. 项目中 package.json 必不可少
位置: 位于项目的根目录下
生成方式:
执行
npm init
自动生成手写
package.json
文件
作用:
记录了 开发环境、生产环境 的依赖的模块列表
记录项目的基础信息(名称、版本、作者信息、项目描述 等)
配置了 项目中的相关的命令(script 中)
3. package.json 中 属性说明
package.json详解,简述如下:
name: 包名(必须要有)
version: 包的版本号(必须要有);包内容的更改和包版本的更改是同步的
description: 包的描述
main: 指定了程序的主入口文件(
- 作用: 通过
require('foo')
使用这个模块,那么 require 返回的内容就是 main 属性指定 入口文件
- 作用: 通过
dependencies : 线上环境 依赖包列表
这个属性是一个对象,配置模块依赖的列表:key是模块名,value是版本范围
这些依赖是指包发布后正常执行时所需要的,也就是线上需要的包
"devDependencies": {
"webpack": "^2.2.1",
"webpack-merge": "^2.6.1",
}
devDependencies: 开发环境 依赖包列表
这个属性是一个对象,存的是 额外的测试文件 或 文档框架
这些依赖只有在开发时候才需要
homepage: 包的官网 url
author: 包的作者姓名
contributors: 包的其他贡献者姓名。
repository: 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
keywords: 关键字
六、发布模块
- 接下来我们可以使用以下命令在 npm 资源库中注册用户(使用邮箱注册):
npm adduser
Username: mcmohd
Password:
Email: (this IS public) mcmohd@gmail.com
- 接下来我们就用以下命令来发布模块:
npm publish
七、使用 npm 创建全局连接
1. 将局部包 连接到 全局:npm link
命令:在 模块目录下执行
npm link
效果:
局部模块 在全局范围内可用
实际上是:在 npm的全局模块目录内,生成一个指向局部模块的文件(会随着局部模块的变化 而 变化)
更新: 局部包更新 全局范围内的使用,将会随着更新
/usr/local/lib/node_modules/myModule -> src/myModule
2. 将全局包 连接到 局部:npm link <Global Module>
命令:在任意目录下 执行
npm link <Global Module>
效果:
局部范围内 不用下载包,便可以使用全局;不会将依赖添加到
package.json
中实际上是:在局部
node_modules
下,生成了一个指向 全局模块的文件(会随着全局模块的变化 而 变化)
3. 删除 局部 与 全局包 的连接:npm unlink <myModule>
命令:
npm unlink <myModule>
项目中不在需要链接的模块,可通过该命令删除