Node.js -- 包管理工具

文章目录

  • 1. 概念介绍
  • 2. npm
    • 2.1 npm 下载
    • 2.2 npm 初始化包
    • 2.3 npm 包
      • (1) npm 搜索包
      • (2) npm 下载安装包
      • (3) require 导入npm 包的基本流程
    • 2.4 开发依赖和生产依赖
    • 2.5 npm 全局安装
      • (1) 修改windows 执行策略
      • (2) 环境变量Path
    • 2.6 安装包依赖
    • 2.7 安装指定版本的包
    • 2.8 删除依赖
    • 2.9 配置命令别名
  • 3. cnpm
    • 3.1 cnpm 介绍与安装
    • 3.2 操作命令
  • 4. npm 配置淘宝镜像
    • 4.1 直接配置
    • 4.2 ==工具配置==
  • 5. yarn
    • 5.1 介绍
    • 5.2 特点
    • 5.3 yarn 常用命令
    • 5.4 yarn 配置淘宝镜像
    • 5.5 npm 和yarn 选择
  • 6. npm 发布一个包
  • 7. 扩展内容
  • 8. nvm 介绍和使用

1. 概念介绍

包是什么?

『包』英文单词是package,代表了一组特定功能的源码集合

包管理工具

管理『包』的应用软件,可以对「包」进行下载安装更新删除上传等操作
借助包管理工具,可以快速开发项目,提升开发效率
包管理工具是一个通用的概念,很多编程语言都有包管理工具,所以掌握好包管理工具非常重要

常用的包管理工具

  • npm
  • yarn
  • cnpm

2. npm

2.1 npm 下载

npm全称Node Package Manager,翻译为中文意思是『Node的包管理工具』
npm是node.js官方内置的包管理工具,是必须要掌握住的工具

在这里插入图片描述

2.2 npm 初始化包

npm init命令的作用是将文件夹初始化为一个『包』,交互式创建package.json文件
package.json是包的配置文件,每个包都必须要有package.json

package.json 内容示例:

{"name": "test","version": "1.0.0","description": "学习npm","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"author": "","license": "ISC"
}

初始化注意事项:

  1. package name(包名)不能使用中文、大写,默认值是文件夹的名称,所以文件夹名称也不能使用中文和大写
  2. version(版本号)要求x.x.x的形式定义,x 必须是数字,默认值是1.0.0
  3. ISC证书与MT证书功能上是相同的,关于开源证书扩展阅读
  4. package.json可以手动创建与修改
  5. 使用npm init -y或者npm init --yes极速创建package.json(文件夹名称不包含大写字母和汉字)

2.3 npm 包

(1) npm 搜索包

  1. 命令行[ npm s(/search) 关键字]
  2. 网站搜索https://www.npmjs.com/

对于如何精准找到需要的包,这就需要我们长期学习,通过文章、项目去积累

(2) npm 下载安装包

我们可以通过npm installnpm i命令安装包
要确保是在联网状态下

#格式
npm install <包名>
npm i <包名>

#示例 比如我们要使用uniq 这个包给数组去重
npm install uniq
npm i uniq

运行之后文件夹下会增加两个资源

  • node_modules文件夹存放下载的包
  • package-lock.json包的锁文件,用来锁定包的版本

如果出现错误,可以试试给node.js 配置一下环境变量。

const uniq = require('uniq')
const array = [1, 2, 3, 4, 5, 6, 2, 3, 4, 5, 2]const result = uniq(array)console.log(result)

// [ 1, 2, 3, 4, 5, 6 ]

安装uniq 之后,uniq 就是当前这个包的一个依赖包,有时会简称为依赖
比如我们创建一个包名字为A,A中安装了包名字是B,我们就说B是A的一个依赖包,也会说A依赖B

(3) require 导入npm 包的基本流程

require 导入模块的类型有三种:

  • 内置模块
  • 自定义模块
  • npm 包

require 导入npm 包的基本流程:

  1. 在当前文件夹下node_modules中寻找同名的文件夹
  2. 在上级目录中下的node_modules中寻找同名的文件夹,直至找到磁盘根目录
const uniq = require('uniq');
const uniq = require('./node_modules/uniq');
const uniq = require('./node_modules/uniq/uniq.js');

其实怕我们导入npm 包有以上三种方式,但是下面两种方式的导入位置都太绝对了,一旦更换了node_modules 文件夹的位置就会出错;所以一般我们会使用第一种导入方式。

2.4 开发依赖和生产依赖

首先来了解一下生产环境和开发环境!

开发环境是程序员专门用来写代码的环境,一般是指程序员的电脑,开发环境的项目一般只能程序员自己访问
生产环境是项目代码正式运行的环境,一般是指正式的服务器电脑,生产环境的项目一般每个客户都可以访问

我们可以在安装时设置选项来区分依赖的类型,目前分为两类:
在这里插入图片描述

举个例子方便大家理解,比如说做蛋炒饭需要大米鸡蛋煤气铲子
其中煤气铲子属于开发依赖,只在制作阶段使用
大米鸡蛋属于生产依赖,在制作与最终食用都会用到
所以开发依赖是只在开发阶段使用的依赖包,而生产依赖是开发阶段和最终上线运行阶段都用到的依赖包

2.5 npm 全局安装

之前我们使用npm 包安装方式都是局部安装,也就是出了某个文件夹就没办法使用了;现在我们来学习一下npm 的全局安装

npm i -g nodemon

全局安装完成之后就可以在命令行的任何位置运行nodemon 命令

该命令的作用是自动重启node应用程序
也就是不像以前一样修改文件后先暂停上次请求再重新启动文件了;有了这个包后,只要保存了文件再次刷新网页,网页内容就会更新了。

说明:

  • 全局安装的命令不受工作目录位置影响
  • 可以通过npm root -g可以查看全局安装包的位置
  • 不是所有的包都适合全局安装,只有全局类的工具才适合,可以通过查看包的官方文档来确定安装方式,这里先不必太纠结

(1) 修改windows 执行策略

有些电脑在安装nodemon 包是可能会出现问题,可能是windows 默认不允许npm 全局执行脚本文件,所以需要修改执行策略。
请添加图片描述
在这里插入图片描述
在这里插入图片描述

(2) 环境变量Path

命令行根目录下如果有xxx.exe / xxx.cmd 的文件在,程序就会去执行文件;
我们如果配置某个程序的环境变量,那么就可以在命令行窗口直接输入程序名就可以打开程序。

如果遇到想要在命令行的任何位置都可以打开某个程序就可以为之配置环境变量。

2.6 安装包依赖

在项目协作中有一个常用的命令就是npm i,通过该命令可以依据package.jsonpackage-lock.json的依赖声明安装项目依赖

npm i
npm install

node_modules文件夹大多数情况都不会存入版本/仓库

在下载别人的代码的时候文件夹中一般都是没有node_modules 文件夹的,这样我们的代码可能就没有办法运行,如果我们一个一个的安装依赖效率很低,所以就可以使用npm i 安装依赖,就可以启动项目了。

2.7 安装指定版本的包

项目中可能会遇到版本不匹配的情况,有时就需要安装指定版本的包,可以使用下面的命令的

##格式
npm i <包名@版本号>
##示例
npm i jquery@1.11.2

2.8 删除依赖

项目中可能需要删除某些不需要的包,可以使用下面的命令

##局部删除
npm remove uniq
npm r uniq
##全局删除
npm remove -g nodemon

2.9 配置命令别名

通过配置命令别名可以更简单的执行命令!

在这里插入图片描述
在这里插入图片描述
2.
在这里插入图片描述
在这里插入图片描述

配置package,json中的scripts属性

{
.
.
.
“scripts”:{
“server”:“node server.js”,
“start”:“node index.js”,
}
.
.
.
}

配置完成之后,可以使用别名执行命令

npm run server
npm run start

不过start别名比较特别,使用时可以省略run

npm start

补充说明:
npm start是项目中常用的一个命令,一般用来启动项目
npm run有自动向上级目录查找的特性,跟require函数也一样
对于陌生的项目,我们可以通过查看scripts属性来参考项目的一些操作

3. cnpm

3.1 cnpm 介绍与安装

cnpm是一个淘宝构建的npmjs.com的完整镜像,也称为 淘宝镜像 ,网址https://npmmirror…com/
cnpm服务部署在国内阿里云服务器上,可以提高包的下载速度
官方也提供了一个全局工具包cnpm,操作命令与npm大体相同

我们可以通过npm来安装cnpm工具

npm install -g cnpm --registry=https://registry.npmmirror.com

3.2 操作命令

功能命令
初始化cnpm init
安装包cnpm i uniq / cnpm i -S uniq / cnpm i -D uniq / cnpm i -g uniq
安装项目依赖cnpm i
删除cnpm r uniq

基本使用与npm 是一样的。

4. npm 配置淘宝镜像

用npm 也可以使用淘宝镜像,配置的方式有两种

  • 直接配置
  • 工具配置

4.1 直接配置

执行如下命令即可完成配置

npm config set registry https://registry.npmmirror.com/

4.2 工具配置

使用nrm配置npm的镜像地址npm registry manager
决定npm 下载包的地址

  1. 安装nrm

npm i -g nrm

  1. 修改镜像

nrm use taobao

nrm 切换注册地址 / 镜像也很方便。

nrm ls

列出支持的镜像地址

  1. 检查是否配置成功 (选做)

npm config list

检查registry 地址是否为https://registry.npmmirror.com/,如果是则表明成功

补充说明:
1.建议使用第二种方式进行镜像配置,因为后续修改起来会比较方便
2.虽然cnpm可以提高速度,但是npm也可以通过淘宝镜像进行加速,所以npm的使用率还是高于cnpm

5. yarn

5.1 介绍

yarn是由Facebook在2016年推出的新的Javascript包管理工具,官方网址:https:/yarnpkg.com/

5.2 特点

yarm官方宣称的一些特点

  • 速度超快:yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。同时利用并行下载以最大化资源利用率,因此安装速度更快
  • 超级安全:在执行代码之前,yarn 会通过算法校验每个安装包的完整性
  • 超级可靠:使用详细、简洁的锁文件格式和明确的安装算法,yarn 能够保证在不同系统上无差异的工作

我们可以使用npm安装yarn

npm i -g yarn

5.3 yarn 常用命令

在这里插入图片描述

5.4 yarn 配置淘宝镜像

可以通过如下命令配置淘宝镜像

yarn config set registry https://registry.npmmirror.com/

可以通过yarn config list查看yarm的配置项

5.5 npm 和yarn 选择

大家可以根据不同的场景进行选择
1.个人项目
如果是个人项目,哪个工具都可以,可以根据自己的喜好来选择
2.公司项目
如果是公司要根据项目代码来选择,可以通过锁文件判断项目的包管理工具

  • npm的锁文件为package-lock.json
  • yarm的锁文件为yarn.lock

包管理工具不要混着用,切记,切记,切记

6. npm 发布一个包

目前了解即可,不太常用
我们可以将自己开发的工具包发布到npm服务上,方便自己和其他开发者使用,操作步骤如下:

  1. 创建文件夹,并创建文件index.js,在文件中声明函数,使用module.exports暴露
  2. npm初始化工具包,package.json填写包的信息(包的名字是唯一的)
  3. 注册账号 https:/www.npmjs.com/signup
  4. 激活账号(一定要激活账号)
  5. 修改为官方的官方镜像(命令行中运行nrm use npm)
  6. 命令行下npm login填写相关用户信息
  7. 命令行下npm publish提交包

更新包:

后续可以对自己发布的包进行更新,操作步骤如下

  1. 更新包中的代码
  2. 测试代码是否可用
  3. 修改package.json中的版本号
  4. 发布更新

npm publish

删除包:
执行如下命令删除包

npm unpublish

删除包需要满足一定的条件,https::/docs.npmjs.com/policies/unpublish
你是包的作者
发布小于24小时
大于24小时后,没有其他包依赖,并且每周小于300下载量,并且只有一个维护者

7. 扩展内容

在这里插入图片描述
除了编程语言领域有包管理工具之外,操作系统层面也存在包管理工具,不过这个包指的是『软件包』
在这里插入图片描述

8. nvm 介绍和使用

nvm全称Node Version Manager顾名思义它是用来管理node版本的工具,方便切换不同版本的Node.js

nvm的使用非常的简单,跟npm的使用方法类似

常用命令:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FIFO Generate IP核使用——AXI接口FIFO简介

AXI接口FIFO是从Native接口FIFO派生而来的。AXI内存映射接口提供了三种样式&#xff1a;AXI4、AXI3和AXI4-Lite。除了Native接口FIFO支持的应用外&#xff0c;AXI FIFO还可以用于AXI系统总线和点对点高速应用。 AXI接口FIFO不支持Builtin FIFO和 Shift Register FIFO配置。 当…

分布式与一致性协议之Paxos算法(三)

Paxos算法 兰伯特关于Multi-Paxos的思考 领导者 我们可以通过引入领导者(Leader)节点来解决第一个问题。也就是说将领导者节点作为唯一提议者&#xff0c;如图所示。这样就不存在多个提议者同时提交提案的情况&#xff0c;也就不存在提案冲突的情况了。这里补充一点:在论文中…

CVE-2022-2602:unix_gc 错误释放 io_uring 注册的文件从而导致的 file UAF

前言 复现该漏洞只是为了学习相关知识&#xff0c;在这里仅仅做简单记录下 exp&#xff0c;关于漏洞的详细内容请参考其他文章&#xff0c;最后在 v5.18.19 内核版本上复现成功&#xff0c;v6.0.2 复现失败 漏洞利用 diff --git a/include/linux/skbuff.h b/include/linux/s…

保存钉钉群直播回放下载:直播回放下载步骤详解

今天&#xff0c;我们就来拨开云雾&#xff0c;揭开保存钉钉群直播回放的神秘面纱。教会你们如何下载钉钉群直播回放 首先用到的工具我全部打包好了&#xff0c;有需要的自己下载一下 钉钉群直播回放工具下载&#xff1a;https://pan.baidu.com/s/1WVMNGoKcTwR_NDpvFP2O2A?p…

从零开始学AI绘画,万字Stable Diffusion终极教程(一)

【第1期】SD入门 2022年8月&#xff0c;一款叫Stable Diffusion的AI绘画软件开源发布&#xff0c;从此开启了AIGC在图像上的爆火发展时期 率先学会SD的人&#xff0c;已经挖掘出了越来越多AI绘画有趣的玩法 从开始的AI美女、线稿上色、真人漫改、头像壁纸 到后来的AI创意字、AI…

M2 Mac mini跑Llama3

前言 在4-19左右&#xff0c;Meta 宣布正式推出下一代开源大语言模型 Llama 3&#xff1b;共包括 80 亿和 700 亿参数两种版本&#xff0c;号称 “是 Llama 2 的重大飞跃”&#xff0c;并为这些规模的 LLM 确立了新的标准。实际上笔者早就体验过&#xff0c;只不过自己电脑没什…

在家连学校的服务器

在家连接学校的服务器。 Step1: 首先下载一个vscode的插件 Visual Studio Code - Code Editing. Redefined 我的服务区是ubuntu20.04&#xff0c;x64的&#xff0c;所以下载这个。 Step2: 下载到本地之后&#xff0c;想办法将这个文件拷贝到你的服务器上。 Step3: 解压该包…

自动化滇医通

###我已经将数据爬取出来### 现在开源集合大家的思路一起研究 &#xff08;请更换ip 以及 暂停时间 不然会提示违规操作&#xff09; 脚本读取预约信息后开始随机抢一家的&#xff0c;qiang方法里面请自行修改抓包数据参数&#xff01;&#xff01; 现在开源大家一起讨论 pyt…

3.【Orangepi Zero2】超声模块ultrasonic(HC-SR04)

超声模块ultrasonic&#xff08;HC-SR04&#xff09; HC-SR04 超声波距离传感器如何工作&#xff1f;程序实现初始化超声波启动超声波获取距离整合代码 HC-SR04 超声波距离传感器如何工作&#xff1f; 当Trig引脚设置为高电平达 10s 时&#xff0c;超声波距离传感器开始工作。…

Java进阶-Java Stream API详解与使用

本文全面介绍了 Java Stream API 的概念、功能以及如何在 Java 中有效地使用它进行集合和数据流的处理。通过详细解释和示例&#xff0c;文章展示了 Java Stream API 在简化代码、提高效率以及支持函数式编程方面的优势。文中还比较了 Java Stream API 与其他集合处理库的异同&…

通过符号程序搜索提升prompt工程

原文地址&#xff1a;supercharging-prompt-engineering-via-symbolic-program-search 通过自动探索​​大量提示变体来找到更好的提示 2024 年 4 月 22 日 众所周知&#xff0c;LLMs的成功在很大程度上仍然取决于我们用正确的指导和例子来提示他们的能力。随着新一代LLMs变得越…

微信小程序demo-----制作文章专栏

前言&#xff1a;不管我们要做什么种类的小程序都涉及到宣传或者扩展其他业务&#xff0c;我们就可以制作一个文章专栏的页面&#xff0c;实现点击一个专栏跳转到相应的页面&#xff0c;页面可以有科普类的知识或者其他&#xff0c;然后页面下方可以自由发挥&#xff0c;添加联…

【Android学习】简易计算器的实现

1.项目基础目录 新增dimens.xml 用于控制全部按钮的尺寸。图片资源放在drawable中。 另外 themes.xml中原来的 <style name"Theme.Learn" parent"Theme.MaterialComponents.DayNight.DarkActionBar">变为了&#xff0c;加上后可针对button中增加图片…

禄得可转债自定义因子交易系统,年化40%,最大回撤15%

经过2个月的研究&#xff0c;和大佬们讨论轮动算法&#xff0c;选股算法&#xff0c;终于完成了可转债自定义因子轮动系统&#xff0c;非常感谢禄得老师的数据 文件链接 禄得可转债自定义因子交易系统&#xff0c;年化40%,最大回撤15% (qq.com) 网页 https://lude.cc/ 程序支…

【云原生】Docker 实践(四):使用 Dockerfile 文件的综合案例

【Docker 实践】系列共包含以下几篇文章&#xff1a; Docker 实践&#xff08;一&#xff09;&#xff1a;在 Docker 中部署第一个应用Docker 实践&#xff08;二&#xff09;&#xff1a;什么是 Docker 的镜像Docker 实践&#xff08;三&#xff09;&#xff1a;使用 Dockerf…

【简单介绍下Faiss原理和使用】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Xamarin.Android项目使用ConstraintLayout约束布局

Xamarin.AndroidX.ConstraintLayout Xamarin.Android.Support.Constraint.Layout Xamarin.AndroidX.ConstraintLayout.Solver Xamarin.AndroidX.DataBinding.ViewBinding Xamarin.AndroidX.Legacy.Support.Core.UI Xamarin.AndroidX.Lifecycle.LiveData ![在这里插入图片描述]…

封装umi-request时通过 AbortController 配置取消请求

一、关键部分 一、在封装的request.ts中 声明一个 abortControllers 对象用于存储要取消的请求&#xff08;我用了-s表示复数&#xff0c;多个abortcontroller对象&#xff0c;与下面&#x1f447;的单个abortController区分&#xff09;封装取消请求的函数cancelRequest, 传入…

机器学习:深入解析SVM的核心概念【一、间隔与支持向量】

直接阅读原始论文可能有点难和复杂&#xff0c;所以导师直接推荐我阅读周志华的《西瓜书》&#xff01;&#xff01;然后仔细阅读其中的第六章&#xff1a;支持向量机 间隔与支持向量 **问题一&#xff1a;什么叫法向量&#xff1f;为什么是叫法向量**什么是法向量&#xff1f;…

.NET操作 Access (MSAccess)

注意&#xff1a;新项目推荐 Sqlite &#xff0c;Access需要注意的东西太多了&#xff0c;比如OFFICE版本&#xff0c;是X86还是X64 连接字符串 ProviderMicrosoft.ACE.OleDB.15.0;Data Source"GetCurrentProjectPath"\\test.accdb//不同的office版本 连接字符串有…