包管理工具:npm

news2024/11/25 4:55:54

安装Node的过程会自动安装npm工具

比如npm install dayjs后

const dayjs=require("dayjs")

console.log(dayjs())

直接运行

生成package.json文件
 方式一:手动从零创建项目,npm init –y
 方式二:通过脚手架创建项目,脚手架会帮助我们生成package.json,并且里面有相关的配置

 

 

全部输入yes的指令

 

 常见的属性

◼ 必须填写的属性:name、version
 name是项目的名称;
 version是当前项目的版本号;
 description是描述信息,很多时候是作为项目的基本描述;
 author是作者相关信息(发布时用到);
 license是开源协议(发布时用到);
◼ private属性:
 private属性记录当前的项目是否是私有的;
 当值为true时,npm是不能发布它的,这是防止私有项目或模块发布出去的方式;

◼ main属性:

 设置程序的入口。
✓ 比如我们使用axios模块 const axios = require('axios');
✓ 如果有main属性,实际上是找到对应的main属性查找文件的;

◼ scripts属性

 scripts属性用于配置一些脚本命令,以键值对的形式存在;
 配置后我们可以通过 npm run 命令的key来执行这个命令;
 npm start和npm run start的区别是什么?
✓ 它们是等价的;

对于常用的 start、 test、stop、restart可以省略掉run直接通过 npm start等方式运行;

但是自定义的如:npm ddsds无法正常运行

  "scripts": {
    "start": "node ./src/main.js",
    "build": "webpack xxx.js"
  },

npm run start/build


◼ dependencies属性

 dependencies属性是指定无论开发环境还是生成环境都需要依赖的包;
 通常是我们项目实际开发用到的一些库模块vue、vuex、vue-router、react、react-dom、axios等等;
 与之对应的是devDependencies;

  "dependencies": {
    "axios": "^0.27.2",
    "dayjs": "^1.11.3",
    "element-plus": "^2.2.6",
    "vue": "^3.2.37"
  },

◼ devDependencies属性

 一些包在生成环境是不需要的,比如webpack、babel等;
 这个时候我们会通过 npm install webpack --save-dev,将它安装到devDependencies属性中;

npm install babel --save-dev说明只在开发环境需要babel

此处--save -dev可以缩写为-D

  "devDependencies": {
    "babel": "^6.23.0",
    "webpack": "^5.73.0"
  }

◼ peerDependencies属性

 还有一种项目依赖关系是对等依赖,也就是你依赖的一个包,它必须是以另外一个宿主包为前提的;
 比如element-plus是依赖于vue3的,ant design是依赖于react、react-dom;

所以如果依赖项内存在element-plus,peerDependencies会存在vue3

◼ engines属性
 engines属性用于指定Node和NPM的版本号;
 在安装的过程中,会先检查对应的引擎版本,如果不符合就会报错;
 事实上也可以指定所在的操作系统 "os" : [ "darwin", "linux" ],只是很少用到;


◼ browserslist属性
 用于配置打包后的JavaScript浏览器的兼容情况,参考;
 否则我们需要手动的添加polyfills来让支持某些语法;
 也就是说它是为webpack等打包工具服务的一个属性(这里不是详细讲解webpack等工具的工作原理,所以不再给出详情);

版本管理

◼ 安装的依赖版本出现:^2.0.3或~2.0.3
◼ npm的包通常需要遵从semver版本规范:
 semver:https://semver.org/lang/zh-CN/
 npm semver:https://docs.npmjs.com/misc/semver


◼ 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永远安装最新的版本;

npm install

把生成的node_modules文件夹删掉,其他代码文件发给别人

别人如果想要重新运行,此时需要重新安装dependencies里面的库,只需要一键:npm isntall

◼ 安装npm包分两种情况:
 全局安装(global install): npm install webpack -g;
 项目(局部)安装(local install): npm install webpack安装到某一个文件下,其他文件使用时需要再次安装


◼ 全局安装
 全局安装是直接将某个包安装到全局:所以文件都可以使用,类似于node
 比如全局安装yarn:


 通常使用npm全局安装的包都是一些工具包:yarn、webpack等;
 并不是类似于 axios、express、koa等库文件;
 所以全局安装了之后并不能让我们在所有的项目中使用 axios等库;


◼ 项目安装会在当前目录下生成一个 node_modules 文件夹,require查找顺序时有讲解过这个包在什么情况下被查找;
◼ 局部安装分为开发时依赖和生产时依赖:
项目安装
# 默认安装开发和生产依赖
npm install axios
npm i axios


# 开发依赖
npm install webpack --save-dev
npm install webpack -D
npm i webpack –D


# 根据package.json中的依赖包
npm install

package.lock.json

package.json没有写明库的版本,可能会导致一些问题(如缺少功能存在bug),lock文件会写清楚使用的版本,这样别人安装时不会版本混乱

◼ package-lock.json文件解析:
◼ name:项目的名称;
◼ version:项目的版本;
◼ lockfileVersion:lock文件的版本;
◼ requires:使用requires来跟踪模块的依赖关系;
◼ dependencies:项目的依赖
 当前项目依赖axios,但是axios依赖follow-redireacts;↓
 axios中的属性如下:
✓ version表示实际安装的axios的版本;
✓ resolved用来记录下载的地址,registry仓库中的位置;

✓ integrity用来从缓存中获取索引,再通过索引去获取压缩包文件;
✓ requires/dependencies(二者都可)记录当前模块的依赖;

{
  "name": "03_npm_install_demo",
  "lockfileVersion": 2,
  "requires": true,
  "packages": {
    "": {
      "dependencies": {
        "axios": "^0.27.2"
      }
    },
    "node_modules/axios": {
      "version": "0.27.2",
      "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
      "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
      "dependencies": {
        "follow-redirects": "^1.14.9",
        "form-data": "^4.0.0"
      }
    }

◼ npm install会检测是有package-lock.json文件:
 没有lock文件
✓ 分析依赖关系,这是因为我们可能包会依赖其他的包,并且多个包之间会产生相同依赖的情况;
✓ 从registry仓库中下载压缩包(如果我们设置了镜像,那么会从镜像服务器下载压缩包);
✓ 获取到压缩包后会对压缩包进行缓存(从npm5开始有的);
✓ 将压缩包解压到项目的node_modules文件夹中(前面我们讲过,require的查找顺序会在该包下面查找)
 有lock文件
✓ 检测lock中包的版本是否和package.json中一致(会按照semver版本规范检测);
➢ 不一致,那么会重新构建依赖关系,直接会走顶层的流程;
✓ 一致的情况下,会去优先查找缓存
➢ 没有找到,会从registry仓库下载,直接走顶层流程;
✓ 查找到,会获取缓存中的压缩文件,并且将压缩文件解压到node_modules文件夹中;

 npm其他指令

◼ 我们这里再介绍几个比较常用的:
◼ 卸载某个依赖包:

npm uninstall package
npm uninstall package --save-dev
npm uninstall package -D
◼ 强制重新build

npm rebuild(比如用于更新版本)
◼ 清除缓存

npm cache clean
◼ npm的命令其实是非常多的:
 https://docs.npmjs.com/cli-documentation/cli
 更多的命令,可以根据需要查阅官方文档
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/746951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sentinel服务器容错简介

spring gateway 详解 服务容错高并发带来的问题服务雪崩效应常见容错方案常见的容错思路1、隔离2、超时3、限流4、熔断5、降级 常见的容错组件 SentinelSentinel 具有以下特征:Sentinel概念和功能相关概念1、资源2、规则 重要功能 服务容错 高并发带来的问题 在微服务架构中&…

Vivado使用误区与进阶系列(七)用Tcl定制Vivado设计实现流程

01 基本的FPGA设计实现流程 FPGA 的设计流程简单来讲,就是从源代码到比特流文件的实现过程。大体上跟 IC 设计流程类似,可以分为前端设计和后端设计。其中前端设计是把源代码综合为对应的门级网表的过程,而后端设计则是把门级网表布局布线到…

orcle报错:TNS 监听程序无法为请求的服务器类型找到可用的处理程序

orcle报错:TNS 监听程序无法为请求的服务器类型找到可用的处理程序 方法一:配置文件修改 服务端的数据库是专用服务器,但是在客户端的tnsname.ora里配置中设置了连接方式为shared,这种情况下打开tnsnames.ora, 找到安装orcle的安装目录,点…

MSP430F5529,超声波,距离检测报警,倒车雷达,SR-04模块

文章目录 硬件连接功能实物效果代码 硬件连接 /* OLED----MSP430VCC-----3.3VGND-----GNDSCL------P3.1SDA------P3.0 */ /* 蜂鸣器----MSP430VCC-----3.3VGND-----GNDDAT------P2.4 */ /* 超声波----MSP430VCC-----3.3VGND-----GNDTRIG------P1.3ECHO------P1.2 */ /* …

模板学堂|数据关系和AntV、ECharts图表解析

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场(https://dataease.io/templates/)。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板,方便用户根据自身的业务需求和使用场景选择对应的仪表板模板,并…

PHP 音乐欣赏网站mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP音乐欣赏网站 是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88041034https://download.…

Sentry 监控 Docker 方式部署

一、简介 根据主篇 Sentry 监控部署与使用 流程,使用 Docker 方式 方式进行部署。 docker 方式 部署操作比较简单,也是 Sentry 官方 比较推崇的方式,直接按 Sentry On-Premise 提供的方式按部就班部署就好了。或者可直接参考 Docker 部署 Se…

关于根据文件名以及内容查找文件存放路径

1 根据文件名字查找文件存放路径 1.1 命令如下(先切换到存放该文件的顶级父目录下): find /path/to/search -name "filename"​​ 1.2 案例如下 2 根据内容查找包含该内容的文件存放路径 2.1 命令如下(先切换到存放该文…

《大大简化每次运行bochs的命令行》ubuntu里安装vscode + makefile文件基本编写 + shell命令

📍安装vscode 启动vscode 如图打开商店,在搜索栏里输入visual studio code,安装即可 在随便一个命令行里输入code即可打开vscode 📍makefile文件基本编写 在实验项目文件夹里创建makefile文件(vscode直接能快捷创…

禁止22H2版windows10出现windows11的跨版本升级提示

近期微软为了强推windows11,笔者所用的笔记本又出现了升级windows11的提示,烦人不说,还担心一不小心点错了,系统就给升了,赶紧禁止了跨版本升级,相关设置记录如下: 一、问题情况 系统出现了升…

[C++] C++特殊类设计 以及 单例模式:设计无法拷贝、只能在堆上创建、只能在栈上创建、不能继承的类, 单例模式以及饿汉与懒汉的场景...

特殊类 1. 不能被拷贝的类 注意, 是不能被拷贝的类, 不是不能拷贝构造的类. 思路就是 了解什么时候 会以什么途径 发生拷贝, 然后将路堵死. 拷贝发生一般发生在 拷贝构造 和 赋值重载 所以, 只要把类的这两个成员函数堵死, 此类就不能拷贝了 C98 在C11之前, 可以通过这种方…

基于Javaweb实现ATM机系统开发实战(六)开卡用户登录及其功能实现

首先输入用户名密码,测试一下用户登录功能,跳转到了UserLogin页面,发现404,是因为我们的servlet还没有编写,页面无法进行跳转。 还是老规矩,先写servlet: package com.atm.servlet;import com…

计算机网络实验(4)--配置网络路由

📍实验目的 了解路由器的特点、基本功能及配置方法;使用模拟软件Packet Tracer 5.3熟悉Cisco路由器的操作;配置静态路由和距离矢量路由协议RIP,实现给定网络的连通;从而加深对IP编址、路由转发机制、路由协议、路由表…

作为一个程序员一定要掌握的算法之遗传算法

目录 一、引言 1.1 目的 1.2 意义 二、遗传算法介绍 2.1 遗传算法的基本思想 2.2 遗传算法与其他算法的主要区别 2.3 基于Java的遗传算法设计思想 三、遗传算法的具体实现 3.1 系统功能模块图和说明 3.2 代码和说明 3.2.1 初始化 3.2.2 选择运算 3.2.3 交叉运算 3…

go语言 Sort包

Sort包 1.常见的类型进行排序 类型功能sort.Float64s([]float64)对float64切片进行升序排序sort.Float64sAreSorted([]float64)bool判断float64切片是否为升序sort.SearchFloat64s([]float64,float64)int在升序切片中查找给定值,找到则返回下标,找不到则返回适合插入值的下标 …

selenium+python做web端自动化测试框架实战

最近受到万点暴击,由于公司业务出现问题,工作任务没那么繁重,有时间摸索seleniumpython自动化测试,结合网上查到的资料自己编写出适合web自动化测试的框架,由于本人也是刚刚开始学习python,这套自动化框架目…

基于 FPGA 的 HDMI/DVI 显示

文章目录 前言一、HDMI 与 DVI 的区别与联系1.1 DVI 接口含义1.2 HDMI 接口含义1.3 HDMI 与 DVI 的区别1.4 HDMI 与 DVI 的兼容性1.5 HDMI 与 DVI 接口对比 二、DVI 数据链路介绍2.1 输入接口层2.2 TMDS 发送器2.3 TMDS 接收器2.4 输出接口层 三、传输原理与实现3.1 TMDS原理3.…

jvm调优工具详解

一、调优工具 先通过jps命令显示Java应用程序的进程id 1、jmap 查看堆实例个数及占用内存大小,把这些信息生成到当前目录下的log.txt文件 jmap -histo 21932 > ./log.txt #查看历史生成的实例 jmap -histo:live 14660 #查看当前存活的实例,执行…

跨浏览器测试的重要性及需要注意的问题

随着互联网的快速发展,人们使用各种不同的浏览器来访问网站。因此,跨浏览器测试变得尤为重要,以确保网站在各种浏览器上都能正常运行和显示。本文将探讨跨浏览器测试的重要性以及需要注意的问题。 一、跨浏览器测试的重要性 随着浏览器的多…

【JAVA】仿顺丰淘宝智能识别信息模块——DidYourTypeItCorrectly

文章目录 题目项目层级结构解答已完成的部分简介未完成的部分概述代码部分DidYourTypeCorrectly.javaFormModel.javaIntelligentRecognition.javaMVCWindow.javaPlaint.java 运行结果截图结语 题目 模拟顺风地址智能识别,对用户输入的信息,包括&#xf…