NPM 入门使用

545 阅读7分钟

前言

NPM (Node Package Manager) 是一个第三方 Node 包管理工具,一个包就是一个 Node 应用。

本文主要讲解 npm 的一些入门知识,主要包括 npm 包的安装、使用、卸载、发布、更新等内容。

1. npm 包

执行 npm 指令安装所需的包:

  • windows:
npm i -g npm@x.x.x
  • Mac:
sudo npm i -g npm@x.x.x

i 是 install 的简写,表示安装。

-g 是 --global 的简写,表示在全局安装,而非固定于某个文件夹或工程。

npm@x.x.x 表示安装的包是 npm,版本号是 x.x.x 。

2. package.json

mkdir npm-demo
cd npm-demo
npm init -y

mkdir: 创建文件夹; cd: 进入文件夹;

npm init -y / npm init --yes: 初始化一个 package.json,里面包含了关于当前应用程序的基本信息。

注意:在你添加任何模块到 node 前,都需要通过上述方式先创建一个 package.json 文件!

3. 包的安装

这里我们安装一个 underscore 库。

npm i underscore --save
npm i underscore

以上两种写法最后的效果是一样的,--save 这个 flag 表示会把包的名字加入到依赖中。(dependencies)

但现在不写这个 flag, 也会把包的名称加入到依赖中。

4. 包的使用

在主目录新建一个 index.js 文件。

// index.js
const _ = require('underscore');

const results = _.contains([1, 2, 3], 2);
console.log(results); // true

注意:require(path) 查找对应文件的顺序是 Core Module => File or folder => node_modules

  • 假设要查找的是以下文件,则会按照注释中的规则来查找:
// example
const uploader = require('./uploader'); // ./uploader.js or ./uploader/index.js

不过实际情况可能比这复杂,如果找不到js文件,它还会查找 json 文件等等。

5. 依赖库

通过 npm 可以下载很多依赖库,如何查看?

ls node_modules/
  • 一个包实际上就是一个应用,所有应用的依赖以及它所依赖的库都保存在 node_modules 中。
  • 另外,如果两个包或多个包同时依赖了同样的库,但是版本不一样。那么它们的依赖将各自保存在自身的文件夹中。

6. 源码控制

node_modules 文件夹的体积会随着项目的发展而不断变大,而实际上我们不想每次都把它提交到仓库,怎么办?那就直接忽略它好了。

那么如何恢复呢?所有下载的包的名字都会在 package.json 中保存下来,所以即便 node_modules 文件夹被删除了也没关系,只要在终端内输入 npm i 就会把依赖重新全部下载下来。

刚刚我们提到,可以在使用 Git 提交代码时,忽略 node_modules 文件夹的提交,那么如何忽略它?

  1. 初始化一个仓库:
git init

查看 master 分支(也就是主分支)下的文件状态,此时会发现未被提交的列表中含有 node_modules/

git status
  1. 添加 .gitignore 文件:
// .gitignore
node_modules/

重新查看 master 分支的状态:

git status

此时再去提交代码,就不会再把 node_modules/ 提交上去了。

7. 语义化版本控制 (SemVer: Semantic Versioning)

// package.json
{
  "name": "npm-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "mongoose": "^5.13.1",
    "underscore": "^1.13.1"
  }
}

其中,dependencies 字段表示当前应用所依赖的库。

7.1 三组数字

例如,第一项 mongoose: "^5.13.1",^ (Caret) 后包含3组数字,中间用.隔开。

  • 分别表示:主要版本号.次要版本号.补丁号 (Major.Minor.Patch)

  • 当修复一个 bug 后,版本号应该为:5.13.2,即补丁号 + 1;

  • 当添加了新的特性且没有破坏现有的接口设置,版本号应该为:5.14.0,即次要版本号 + 1;(如果发现 bug,那么补丁号也会相应增加。)

  • 当添加了新的特性且破坏了现有应用的依赖关系,版本号应该为:6.0.0,即主要版本号 + 1.

7.2 数字前的符号

^5.13.1:告诉 npm 关注当前依赖的任何版本更新,只要主要版本号不变,这里是 5。也就是说,此时如果次要版本号和补丁号发生变化就会下载新的包。

5.13.1:无符号时,等价于 5.x,保持为固定版本。

~5.13.1:波浪线等价于 5.13.x,补丁号不固定,如果有 bug 修复并更新,那么也会让你的应用保持为最新的状态。

8. 列举已安装的依赖库版本

带符号的依赖都会及时更新为新版本,那么如何查看到底更新到哪个版本了呢?

进入 node_modules 文件夹,找到对应的依赖下的 package.json 文件,里面有个 version 字段,就是当前安装的版本。当需要查看的依赖很多时,这种一个一个点开看的方式就会显得很麻烦。

用命令行的方式:

  • 查看并列出所有依赖库的版本:
npm list
  • 查看并列出第一层的依赖库版本:
npm list --depth=0

如果要查看其他层级,改变 --depth=x 中的 x 即可。

9. 查看一个包的信息

  • 查看基本信息:
npm view mongoose
  • 查看依赖:
npm view mongoose dependencies
npm view mongoose 其他 package.json 中的字段
  • 查看所有版本:
npm view mongoose versions

查看所有版本的好处是,方便回滚或更新一个库!

10. 版本的回滚与更新

10.1 回滚

npm i mongoose@2.9.0
npm i underscore@1.8.3

注意:如果不加 @x.x.x,仅写包名,那么默认下载最新的包。

10.2 更新

  • 查看过期的库

    npm outdated
    

    image-20210704130048938.png

​ Current:当前版本号

​ Wanted: 期望版本号,主要版本号不可变,以免发生错误。

​ Latest:最新版本号

  • 更新版本

    npm update
    

    image-20210704130523610.png

都更新到了期望版本号。

如果想要更新到最新的版本,可以先进行全部版本的查询,再安装对应的库。

或者利用插件:npm-check-updates,它会将你的 package.json 依赖更新到最新的版本。

npm i -g npm-check-updates

执行检查:

ncu

image-20210704131216488.png

可以看到,检查的结果,5.13.2是最新版本。运行 ncu -u 就能更新 package.json 文件了。

ncu -u

完成之后,就会发现 json 文件中的 ^2.9.10 变成了 ^5.13.2。

最后,安装依赖,就能将依赖更新到最新的版本了!

npm i

image-20210704131538314.png

可以用 npm outdatedncu 再次检查下是否还含有过期的包。

11. 仅用于开发的依赖 (DevDenpendencies)

有些依赖库仅用于开发环境,例如静态代码检查、单元测试等等。

加上后缀 --save-dev,告诉 node 这些用于开发环境,不用发布到生产环境。

npm i jshint --save-dev

JSHint is a community-driven tool that detects errors and potential problems in JavaScript code.

12. 包的卸载

npm uninstall 依赖名称
npm un 依赖名称

13. 包的发布

  1. 新建文件夹 eric-lib-test-1
mkdir eric-lib-test-1
cd eric-lib-test-1
  1. 初始化包文件
npm init -y
  1. 添加主文件 index.js
// index.js
module.exports.add = (x, y) => x + y;
  1. npm 账号登陆
npm login

会让你回答三个问题:用户名、密码、邮箱。

npm logout: npm 账号退出。退出后,如果想要再次发布或更新发布,需要重新登录账号才行!

  1. 发布
npm publish

image-20210704140647322.png

  1. 下载使用
npm i eric-lib-test-1

14. 包的更新

  1. 更新 index.js 添加乘法。
// index.js
module.exports.add = (x, y) => x + y;
module.exports.multiply = (x, y) => x * y;
  1. 调整版本号

注意这里可以手动在 package.json 中修改包的版本,也可以通过 npm 命令:

  • npm version major:表示大改了接口,主要版本发生变化。(1.0.0 => 2.0.0)
  • npm version minor:表示添加了新特性,接口没发生什么变化。(1.0.0 => 1.1.0)
  • npm version patch:表示修复了 bug。(1.0.0 => 1.0.1)

这里属于第二种,添加了新特性。

npm version minor

image-20210704142650178.png

  1. 发布更新完成的包(要保证 npm 账号是登录状态)
npm publish

image-20210704143417254.png

综上,是本文的全部内容,涵盖了 npm 包的安装、使用、卸载、发布、更新以及版本号的介绍。

添加我的微信:with_his_x,共同成长,卷卷群里等你 🤪。

以上,感谢您的阅读~