17.这次专门总结包管理器npm(yarn)相关的东西...

141 阅读3分钟

npm库与node的关系:

npm与node的关系? (npm: node package manager ) 安装node后自动安装npm (npm是node官方出的包管理器,专门用于管理包)

常用命令(为方便对比,把yarn的指令一并附上):

// 初始化包
npm init -y
yarn init -y
// 搜包
npm search jquery
// 下载项目所有声明的依赖
npm install
yarn
// 下载指定的开发时依赖
npm intall xxx@1.1.1 -D
yarn add xxx@1.1.1 -D
// 全局下载指定包
npm install xxx --save -g // npm6省略了--save/-S:标记在package.json中(依赖声明)
yarn global add xxx
/*
(1)局部安装完的第三方包,放在当前目录node_modules文件夹
(2)安装完毕会自动产生于package-lock.json(npm5以后),里面缓存的是每个下载过的包地址,目的是下次安装时速度快些
(3)查看全局安装目录:npm root -g
(4)一般来说,带有指令集的包要进行全局安装,例如: browserify,babel等,全局安装的包,其指令到处可用,如果该包不带有指令,就无需全局安装
(5)关于版本号的说明:
    "^3.x.x":锁定大版本,以后安装包的时候,保证包是3.x.x版本, x默认取最新的
    "~3.1.x":锁定小版本,以后安装包的时候,保证包是3.1.x版本, x默认取最新的
    "3.1.1":锁定完整版本,以后安装包的时候,保证包必须是3.1.1版本
*/
// 下载指定的运行时依赖
npm install xxx@1.1.1 -S
yarn add xxx@1.1.1
// 删除依赖包
npm uninstall xxx
yarn remove xxx
// 查看某个包的信息
npm info xxx
yarn info xxx
// 设置淘宝镜像
npm config set registry https://registry.npm.taobao.org
yarn config set registry https://registry.npm.taobao.org
// 其他命令
npm aduit fix: 检测项目依赖中的一些问题,并且尝试修复
npm view xxx versions: 查看远程npm仓库中xxx包的所有版本信息
npm view xxx version: 查看npm仓库xxx包的最新版本
npm ls xxx: 查看我们所安装的xxx包的版本

搬运工cnpm库(淘宝镜像库)

npm install -g cnpm --registry=http://registry.npm.taobao.org

其他命令npm → cnpm (操作上有一些问题,推荐为npm配置cnpm地址)

为npm配置cnpm地址(推荐)

npm config set registry https://registry.npm.taobao.org
// 查看配置
npm config get registry

yarn管理工具

npm i yarn -g
// 在环境变量中添加全局路径
yarn global dir
yarn global bin

文件说明

package.json

package.json文件记录项目中所需要的所有模块。当执行npm install的时候,node会先从package.json文件中读取所有dependencies信息,然后根据dependencies中的信息与node.modules中的模块进行对比,没有的直接下载,已有的检查更新(最新版本的nodejs不会更新,因为有package-lock.json文件)。另外,package.json文件只记录通过npm install方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。

package-lock.json

package-lock.json文件锁定所有模块的版本号,包括主模块和所有依赖子模块。当执行npm instal的时候,node从package.json文件读取模块名称,从package-lock.json文件中获取版本号,然后进行下载或者更新。因此,正因为有了package-lock.json文件锁定版本号,所以执行npm instal的时候,node不会自动更新package.json文件中的模块,必须用npm install packagename (自动更新小版本号)或者npm指定版本号来进行安装才会更新,package-lockjson文件中的版本号也会随着更新。
附:当package.json与package-lock.json都不存在,执行"npm install"时,node会重新生成package-lock.json文件,然后把node_modules中的模块信息全部记入package-lock.json文件,但不会生成package.json文件,此时可通过"npm init --yes"来初始化生成package.json文件。

总结

项目中引入的包版本号之前经常会加号,每次在执行npm install之后,下载的包都会发生变化,为了系统的稳定性考虑,每次执行完npm install之后会创建或者更新package-lock文件。该文件记录了上一次安装的具体的版本号,相当于是提供了一个参考,在出现版本兼容性问题的时候,就可以参考这个文件来修改版本号即可。