npm 使用简介及 package.json 详解

npm 简介

全称:Node Package Manager
npm 是随同 NodeJS 一起安装的包管理工具,能解决NodeJS代码部署上的很多问题。

使用 npm 命令安装模块

$ npm install <Module Name>			// 本地安装
$ npm install <Module Name>	-g		// 全局安装

package.json

记录项目名称、版本号、项目描述,以及列出当前项目所依赖的其他库的信息和依赖库的版本号。

如何生成 package.json 文件

$ npm init
// 或者
$ npm init --yes
// 基本内容如下
{
  "name": "Hello world",
  "version": "1.0.0",
  "description": "My first project",
  "repository": "...",
  "author": "xxx@gmail.com",
  "license": "UNLICENSED",
  "private": true,
}
//private 字段可以声明当前项目是否是私有的,为 true 则 npm 不能发布它

package.json 常用属性说明

  • scripts
  1. scripts属性用于配置一些脚本命令,以键值对的形式存在
  2. 配置后通过 npm run 的 key 来执行这个命令
  3. 对于常用的 start、test、stop、restart 可以省略掉 run 直接通过 npm start 等方式运行
  • dependencies、devDependencies 和 peerDependencies 的区别
  1. dependencies 是指无论开发环境还是生产环境都需要依赖的包。通常是我们项目实际开发要用到的一些库,如 react、react-dom、react-redux、axios 等。
  2. devDependencies 只包含用在 dev 和 test 环境上的包。一些包在生产环境是不需要的,如 webpack、babel 等。如:通过 npm install webpack --save-dev(或-D),安装到 devDependencies。
  3. peerDependencies 对等依赖。就是你依赖的一个包,它必须是以另外一个宿主包为前提的;比如 element-plus 是依赖于 vue3 的,ant design是依赖于 react、react-dom;
  • engines

用于指定 Node 和 NPM 的版本号(安装时会检查对应的引擎版本,不符合报错)

  • browserslist

用于配置打包后的JS浏览器的兼容情况,它是为 webpack 等打包工具服务的一个属性。

版本号说明

semver版本规范 X.Y.Z
X 主版本号(major): 当你做了(可能)不兼容之前版本的API修改;
Y 次版本号(minor): 当你做了向下兼容的功能性新增(新功能增加,但是兼容之前的版本);
Z 修订号(patch): 当你做了向下兼容的问题修正(没有新功能,修复之前版本的bug);

  • 版本号前的 ^ 和 ~ 的区别

x.y.z 表示一个明确的版本号
^x.y.z 表示x是保持不变的,y和z永远安装最新的版本;
~x.y.z 表示x和y保持不变的,z永远安装最新的版本;

package-lock文件

从registry仓库下载npm包,下载后会做缓存,放在package-lock文件里面
name - 项目名
version - 版本
lockfileVersion - lock文件的版本
requires - 跟踪模块的依赖关系
dependencies - 项目的依赖

//例如:
axios:{
	version: 0.20.0		//代表实际安装的版本
	resolved: ...		//记录下载的地址,registry仓库中的位置
	integrity: ...		//用来从缓存中获取索引,再通过索引去获取压缩包文件
	dependencies: ...	//记录当前模块的依赖
}

npm install 原理

  • 执行 npm install -> 查找 package.json -> 检测是否有 lock 文件
  • 没有 lock 文件 -> 分析依赖关系(可能包会依赖其他的包)-> 从 registry 仓库下载压缩包(并做缓存,npm5开始) -> 解压到 node_modules -> 生成 package-lock 文件 -> 完成安装。
  • 有 lock 文件 -> 去 lock 文件里检查包的版本是否和 package.json 一致(按 semver 版本规范检测),如果一致则优先查找缓存,得到压缩包;如果不一致,重新构建依赖关系,再从 registry 仓库去获取压缩包。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值