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 自行安装需要的模块。

团队开发时使用流程如下:

  1. 从仓库中拉取仓库代码。
  2. 运行 npm install 安装相关依赖。
  3. 运行项目,继续开发。

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 发布步骤

第一步 创建本地包

  1. 创建文件夹,并创建文件index.js, 在文件中声明函数,使用 module.exports 暴露
  2. npm 初始化工具包,package.json 填写包的信息

第二步 注册账号并登录

  1. 官网 http://npmjs.org 注册账号,需要邮箱验证。
  2. 命令行下执行命令 npm login 进行登录。

第三部 发布

  1. 如果修改过官方镜像地址,请先求改为官方的地址 npm config set registry https://registry.npmjs.org/

  2. 命令行下执行命令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

npxnpm 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/

results matching ""

    No results matching ""