• npm 使用简介及 package.json 详解


    npm 简介

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

    使用 npm 命令安装模块

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

    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 不能发布它
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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: ...	//记录当前模块的依赖
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    npm install 原理

    • 执行 npm install -> 查找 package.json -> 检测是否有 lock 文件
    • 没有 lock 文件 -> 分析依赖关系(可能包会依赖其他的包)-> 从 registry 仓库下载压缩包(并做缓存,npm5开始) -> 解压到 node_modules -> 生成 package-lock 文件 -> 完成安装。
    • 有 lock 文件 -> 去 lock 文件里检查包的版本是否和 package.json 一致(按 semver 版本规范检测),如果一致则优先查找缓存,得到压缩包;如果不一致,重新构建依赖关系,再从 registry 仓库去获取压缩包。
  • 相关阅读:
    Linux_文件系统(内存角度)
    MATLAB|科研绘图|山脊图
    DusQ1 CPG 500/1000
    (哈希表 ) 349. 两个数组的交集 ——【Leetcode每日一题】
    acwing算法基础之基础算法--高精度乘法算法
    目标检测YOLO实战应用案例100讲-基于YOLOv7的番茄采摘机械手场景感知及试验(中)
    Halcon 常用通道Scale灰度元操作整理
    聊聊spring事务的REQUIRES_NEW
    如何保护PayPal账户安全:防止多个PayPal账号关联?
    11 盛水最多的容器
  • 原文地址:https://blog.csdn.net/DarinZanya/article/details/127739569