NPM Node 中的包管理工具
1 NPM 概述
1.1 介绍
全称:Node Package Manager , Node 的包管理器,也是一个应用程序。
1.2 包是什么
Node.js 的包基本遵循 CommonJS 规范,将一组相关的模块组合在一起,形成一个完整的工具
1.3 作用
通过 NPM 可以对 Node 的工具包进行搜索、下载、安装、删除、上传。借助别人写好的包,可以让我们的开发更加方便。
常见的使用场景有以下 3 种:
- 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
- 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
- 允许用户将自己编写的包上传到NPM服务器供别人使用。
1.4 安装
安装完 nodejs 之后会自动安装 npm。
1.5 NPM 官网
https://npmjs.org 可以从官网搜索包以及查看包的信息。
2 NPM 常用操作命令
查看 npm 的版本
npm -v
初始化
项目中没有 package.json,我们需要进行初始化,创建 package.json 文件
npm init
# 以下命令可以快速初始化
npm init --yes
npm init -y
搜索包
npm search 包名
该命令使用频率不高,一般在搜索包的时候,会到 https://npmjs.org 搜索。
安装包
npm install 包名
npm i 包名
# 安装并在 package.json 中保存包的信息(dependencies 属性,表示生成依赖)
npm install 包名 --save
npm install 包名 -S
# 安装并在 package.json 中保存包的信息(devDependencies 属性,表示开发依赖)
npm install babel --save-dev
npm install babel -D
注意: 6 以及以上版本的 npm ,安装包时会自动保存在 dependencies 中,可以不用写
--save
。
包安装完成之后文件夹下会增加一个文件和一个文件:
node_modules 文件夹 存放下载的包
package-lock.json 包的锁文件 ,用来锁定包的版本
开发依赖 是只在开发阶段使用的依赖包,而 生产依赖 是开发阶段和最终上线运行阶段都用到的依赖包。
全局安装包
npm install -g 包名
npm i -g 包名
全局安装一般用于安装全局命令行工具,如 cnpm,yarn,webpack ,gulp 等,可以通过 npm root -g
可以查看全局安装包的位置,全局安装的包默认安装在如下位置:
C:\Users\你的用户名\AppData\Roaming\npm
安装指定版本的包
项目中可能会遇到版本不匹配的情况,有时就需要安装指定版本的包,可以使用下面的命令的:
## 格式
npm i <包名@版本号>
## 示例
npm i jquery@1.11.2
移除包
npm uninstall 包名
npm uninstall -g 包名 # 删除全局安装的包
npm remove 包名 # remove 是 uninstall 的别名
npm remove -g 包名
更新包
npm update 包名
npm update -g 包名 # 更新全局安装的包
npm outdated # 查看当前本地安装的包哪些需要更新
npm outdated -g # 查看当前全局安装的包哪些需要更新
注意,更新本地安装的包,会受到 pakeage.json
中版本设置的约束; 更新全局安装的包会直接更新到最新版。
安装依赖
如果项目中已经存在package.json,我们可以根据 package.json 中的依赖声明, 安装工具包
npm install
npm i
npm install --production # 只安装 dependencies 中的依赖
npm i --production
清除缓存
npm cache clean --force # force 表示强制清除
3 package.json
3.1 内容介绍
- name - 包名。
- version - 包的版本号。
- description - 包的描述。
- homepage - 包的官网 url 。
- author - 包的作者姓名。
- contributors - 包的其他贡献者姓名。
- dependencies - 依赖包列表。(产品依赖的包)
- devDependencies - 开发依赖包列表。(开发过程中依赖的包)
- repository - 包的远程仓库信息。
- main - 包的入口文件,默认是 index.js。
- keywords - 关键字。
- license - 开源许可证。
注意:包名不能使用中文,大写 ,不能使用
npm
作为包的名字。
ISC 证书与 MIT 证书功能上是相同的,关于开源证书扩展阅读 http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html
3.2 开发中的作用
我们团队开发的时候,node_module 这个目录是不会进行共享的,团队成员可以根据 pageage.json 自行安装需要的模块。
团队开发时使用流程如下:
- 从仓库中拉取仓库代码。
- 运行
npm install
安装相关依赖。 - 运行项目,继续开发。
3.3 关于版本号
版本格式:主版本号.次版本号.修订号
- "^3.0.0" :锁定大版本,以后安装包的时候,保证包是3.x.x版本,x默认取最新的。
- "~3.1.1" :锁定小版本,以后安装包的时候,保证包是3.1.x版本,x默认取最新的。
- "3.1.1" :锁定完整版本,以后安装包的时候,保证包必须是3.1.1版本。
3.4 配置命令别名
配置 package.json 中的 scripts
属性:
{
"scripts": {
"server": "node server.js",
"start": "node index.js",
},
}
配置完成之后,可以使用别名执行命令:
npm run server
npm run start
不过 start
别名比较特别,使用时可以省略 run
npm start
补充说明:
npm start
是项目中常用的一个命令,一般用来启动项目npm run
有自动向上级目录查找的特性,跟require
函数也一样- 对于陌生的项目,我们可以通过查看
scripts
属性来参考项目的一些操作
4 发布 NPM 包
4.1 发布步骤
第一步 创建本地包
- 创建文件夹,并创建文件index.js, 在文件中声明函数,使用 module.exports 暴露
- npm 初始化工具包,package.json 填写包的信息
第二步 注册账号并登录
- 官网 http://npmjs.org 注册账号,需要邮箱验证。
- 命令行下执行命令
npm login
进行登录。
第三部 发布
如果修改过官方镜像地址,请先求改为官方的地址
npm config set registry https://registry.npmjs.org/
命令行下执行命令
npm publish
提交包。
注意:npm 有垃圾检测机制,如果名字简单或做测试提交,很可能会被拒绝提交,可以尝试改一下包的名称来解决这个问题。
注意:如果升级 NPM 包,需要修改 package.json 中的版本号修改,才能提交。
4.2 包中添加全局命令(发布命令行工具)
第一步 创建命令行执行的脚步文件,第一行代码写 #!/usr/bin/env node
。
#!/usr/bin/env node
/*
这里是运行命令时候要执行的代码
*/
第二步 在 package.json
文件中配置 bin
字段
"bin": {
"命令名": "刚才创建的脚步文件路径"
}
4.3 相关命令总结
注册用户
npm adduser
登录
npm login #登录
npm logout #退出登录
npm whoami #查看当前登录的用户
发布
npm publish
取消发布
npm unpublish 包名 --force
5 CNPM
5.1 介绍
cnpm 是淘宝对国外 npm 服务器的一个完整镜像版本,也就是淘宝 npm 镜像,网站地址http://npm.taobao.org/
5.2 安装配置 cnpm 方式
方式一:全局安装 cnpm 命令,安装完成后使用 cnpm
命令代替 npm
命令。
npm install -g cnpm --registry=https://registry.npm.taobao.org
方式二:通过添加 npm
参数 alias
一个新命令,安装完成后使用 cnpm
命令代替 npm
命令。
alias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/dist \
--userconfig=HOME/.cnpmrc"
方式三:把官方镜像地址修改为淘宝镜像地址,修改后继续使用 npm 命令
。
# 设置为淘宝镜像
npm config set registry https://registry.npm.taobao.org
# 如果想改回官方镜像
npm config set registry https://registry.npmjs.org/
5.3 使用
如果是采用方式一和方式二,配置完成后,就可以使用 cnpm
命令来管理包,使用方法跟 npm
一样
cnpm install 包名
如果是方式三,修改了镜像地址,仍然使用 npm
命令。
6 Yarn
6.1 介绍
yarn 是 Facebook 开源的新的包管理器,可以用来代替 npm。
6.2 特点
yarn 相比于 npm 有几个特点:
- 本地缓存。安装过的包下次不会进行远程安装
- 并行下载。一次下载多个包,而 npm 是串行下载
- 精准的版本控制,保证每次安装跟上次都是一样的
6.3 安装
npm 安装
只需要一行命令即可安装 yarn
npm install yarn -g
msi 安装包安装
https://classic.yarnpkg.com/en/docs/install#windows-stable
6.4 相关命令
yarn --version
yarn init # 初始化包 生成 package.json
yarn add 包名 # 安装包
yarn add 包名 --dev # 相当于 npm 中的--save-dev
yarn global add 包铭 #全局安装 全局安装路径 C:\Users\你的用户名\AppData\Local\Yarn\bin
yarn remove 包名 # 移除包
yarn # 安装 package.json中的所有依赖
yarn config set registry https://registry.npm.taobao.org # yarn 修改镜像地址
注意: 这里有个小问题就是 全局安装的包不可用,需要自行配置环境变量,yarn 全局安装包的位置可以通过
yarn global bin
来查看。
7 CYarn
跟 npm 与 cnpm 的关系一样,可以为 yarn 设置国内的淘宝镜像,提升安装的速度
npm install cyarn -g --registry "https://registry.npm.taobao.org"
配置后,只需将 yarn 改为 cyarn 使用即可
8 npx
npx
是 npm 5.2+
版本中自带的一个命令行工具,用于执行依赖包中的可执行文件。它的作用是在不安装全局包的情况下,使用依赖包中的命令行工具。具体参考 npx 使用教程 - 阮一峰的网络日志
举个例子,如果你想要使用 create-react-app
创建一个新的 React 应用程序,你可以使用以下命令:
npx create-react-app my-app
9 包管理工具扩展介绍
在很多语言中都有包管理工具,比如:
语言 | 包管理工具 |
---|---|
PHP | composer |
Python | pip |
Java | maven |
Go | go mod |
JavaScript | npm/yarn/cnpm/other |
Ruby | rubyGems |
除了编程语言领域有包管理工具之外,操作系统层面也存在包管理工具,不过这个包指的是『软件包
』
操作系统 | 包管理工具 | 网址 |
---|---|---|
Centos | yum | https://packages.debian.org/stable/ |
Ubuntu | apt | https://packages.ubuntu.com/ |
MacOS | homebrew | https://brew.sh/ |
Windows | chocolatey | https://chocolatey.org/ |