NPM学习笔记

NPM 是什么

npm(“Node 包管理器”)是 JavaScript 运行时 Node.js 的默认程序包管理器。

npm 由两个主要部分组成:

  • 用于发布和下载程序包的 CLI(命令行界面)工具
  • 托管 JavaScript 程序包的​​在线存储库​

package.json

每个 JavaScript 项目(无论是 Node.js 还是浏览器应用程序)都可以被当作 npm 软件包,并且通过 ​​package.json​​ 来描述项目和软件包信息。

当运行 ​​npm init​​​ 初始化 JavaScript/Node.js 项目时,将生成 ​​package.json​​ 文件,文件内的内容(基本元数据)由开发人员提供:

  • ​name​​:JavaScript 项目或库的名称。
  • ​version​​:项目的版本。通常,在应用程序开发中,由于没有必要对开源库进行版本控制,因此经常忽略这一块。但是,仍可以用它来定义版本。
  • ​description​​:项目的描述。
  • ​license​​:项目的许可证。

npm scripts

​package.json​​​ 还支持一个 ​​scripts​​ 属性,可以把它当作在项目本地运行的命令行工具。

{
"scripts": {
"build": "tsc",
"format": "prettier --write **/*.ts",
"format-check": "prettier --check **/*.ts",
"lint": "eslint src/**/*.ts",
"pack": "ncc build",
"test": "jest",
"all": "npm run build && npm run format && npm run lint && npm run pack && npm test"
}
}

​eslint​​​,​​prettier​​​,​​ncc​​​,​​jest​​​ 不是安装为全局可执行文件,而是安装在项目本地的 ​​node_modules/.bin/​​ 中

dependencies vs devDependencies

这两个以键值对象的形式出现,其中 npm 库的名称为键,其​​语义格式​​版本为值。

{
"dependencies": {
"@actions/core": "^1.2.3",
"@actions/github": "^2.1.1"
},
"devDependencies": {
"@types/jest": "^25.1.4",
"@types/node": "^13.9.0",
"@typescript-eslint/parser": "^2.22.0",
"@zeit/ncc": "^0.21.1",
"eslint": "^6.8.0",
"eslint-plugin-github": "^3.4.1",
"eslint-plugin-jest": "^23.8.2",
"jest": "^25.1.0",
"jest-circus": "^25.1.0",
"js-yaml": "^3.13.1",
"prettier": "^1.19.1",
"ts-jest": "^25.2.1",
"typescript": "^3.8.3"
}
}

这些依赖通过带有 ​​--save​​​ 或 ​​--save-dev​​​ 标志的 ​​npm install​​ 命令安装。 它们分别用于生产和开发/测试环境。

  • ​^​​​:表示最新的次版本,例如,​​^1.0.4​​​ 可能会安装主版本系列​​1​​​ 的最新次版本​​1.3.0​​。
  • ​〜​​​:表示最新的补丁程序版本,与​​^​​​ 类似,​​〜1.0.4​​​ 可能会安装次版本系列​​1.0​​​ 的最新次版本​​1.0.7​​。
  • 以上版本方法都是major.minor.patch 模型

major.minor.patch这三部分分别表示的含义。

1、major
major表示当前MyBatis的主版本号,它的变化通常意味着MyBatis的巨大的变化,MyBatis的前世是ibatis,是在3.0版本发布之后才更名的,之前一直叫ibatis。

2、minor
minor称之为MyBatis的次版本号,它通常只反映了一些较大的更改,比如MyBatis的API的增加等等,但是这些更改并不影响与旧版本源代码和二进制代码之间的兼容性。

3、patch
patch通常称之为补丁版本,通常情况下如果只是对MyBatis内部函数的修改而不影响API接口的话都会导致patch的变化。

package-lock.json

该文件描述了 npm JavaScript 项目中使用的依赖项的确切版本。如果 ​​package.json​​​ 是通用的描述性标签,则 ​​package-lock.json​​ 是成分表。

npm install

这是现在我们开发 JavaScript/Node.js 应用程序时最常用的命令。

默认情况下,​​npm install <package-name>​​​ 将安装带有 ​​^​​​ 版本号的软件包的最新版本。npm 项目上下文中的 ​​npm install​​​ 将根据 ​​package.json​​​ 规范将软件包下载到项目的 ​​node_modules​​​ 文件夹中,从而升级软件包的版本(并重新生成 ​​package-lock.json​​​ )。 ​​npm install <package-name>​​​ 可以基于 ​​^​​​ 和 ​​〜​​ 版本匹配

安装不同版本

install 命令总是安装模块的最新版本,如果要安装模块的特定版本,可以在模块名后面加上@和版本号。

npm init 初始化 package.json 文件

用来初始化生成​​package.json​​文件。在这个过程中会向用户提问一系列问题,如果你觉得不用修改默认配置,一路回车就可以了。

如果使用了​​-f​​​(代表​​force​​​)、​​-y​​​(代表​​yes​​​),则跳过提问阶段,直接生成一个新的​​package.json​​文件。

避免系统权限

默认情况下,​​Npm​​​全局模块都安装在系统目录(比如​​/usr/local/lib/​​​),普通用户没有写入权限,需要用到​​sudo​​​命令。这不是很方便,我们可以在没有​​root​​权限的情况下,安装全局模块。

首先,在主目录下新建配置文件​​.npmrc​​​,然后在该文件中将​​prefix​​变量定义到主目录下面。

prefix = /home/yourUsername/npm

然后在主目录下新建​​npm​​子目录

$ mkdir ~/npm

此后,全局安装的模块都会安装在这个子目录中,​​npm​​​也会到​​~/npm/bin​​目录去寻找命令。

最后,将这个路径在​​.bash_profile​​​文件(或​​.bashrc​​​文件)中加入​​PATH​​变量。

export PATH=~/npm/bin:$PATH

npm uninstall

npm uninstall命令,卸载已安装的模块

$ npm uninstall [package name]

# 卸载全局模块
$ npm uninstall [package name] -global

npm run

npm 不仅可以用于模块管理,还可以用于执行脚本。package.json 文件有一个 scripts 字段,可以用于指定脚本命令,供npm直接调用。

npm run 命令会自动在环境变量 $PATH 添加 node_modules/.bin 目录,所以 scripts 字段里面调用命令时不用加上路径,这就避免了全局安装 NPM 模块。

npm run 如果不加任何参数,直接运行,会列出 package.json 里面所有可以执行的脚本命令。

yarn

初始化一个新项目

yarn init

添加依赖包

yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]

将依赖项添加到不同依赖项类别中

分别添加到 ​​devDependencies​​​、​​peerDependencies​​​ 和 ​​optionalDependencies​​ 类别中:

yarn add [package] --dev
yarn add [package] --peer
yarn add [package] --optional

升级依赖包

yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]

移除依赖包

yarn remove [package]

安装项目的全部依赖

yarn

或者

yarn install

Yarn和npm命令对比

npm

yarn

npm install

yarn

npm install react --save

yarn add react

npm uninstall react --save

yarn remove react

npm install react --save-dev

yarn add react --dev

npm update --save

yarn upgrade