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.mzph.cn/pingmian/4275.shtml

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

相关文章

visual studio2022,开发CMake项目添加rabbitmq库,连接到远程计算机并进行开发于调试

1.打开visual studio installer 。安装“用于 Windows 的 C CMake 工具” 2.新建CMake项目 3.点击VS的“工具”—>"选项“—>“跨平台”—>”连接管理器“,添加远程计算机。用来将VS编辑的代码传到服务器进行编译–连接—运行&#xff08;调试&#xff09;。 …

java中的泛型(三)——通配符

在前面的文章中我们简要介绍了泛型的概念以及泛型类和泛型方法的使用。在介绍泛型时我们说过在在java中一般用E、T、K、V、N、?这几个字母和符号来表示泛型&#xff0c;对于前面的几个字符它们的使用没有区别&#xff0c;只要注意它们所代表的类型就好。而对于最后一个&#x…

优化大型语言模型交互:提升查询和提示效果的26条原则

推荐下arxiv挂的一个提示词教程&#xff1a; https://github.com/VILA-Lab/ATLAS https://arxiv.org/abs/2312.16171 它提出了一套26条指导原则&#xff0c;改善和优化与大型语言模型&#xff08;LLMs&#xff09;的交互过程。通过这些原则&#xff0c;旨在简化对LLMs的查询和…

E4980A是德科技E4980A精密LCR表

181/2461/8938产品概述&#xff1a; Keysight E4980A 精密 LCR 表为各种元件测量提供了精度、速度和多功能性的最佳组合。E4980A 在低阻抗和高阻抗范围内提供快速测量速度和出色的性能&#xff0c;是元件和材料的一般研发和制造测试的终极工具。LAN、USB 和 GPIB PC 连接可提高…

【氮化镓】p-GaN HEMTs空穴陷阱低温冻结效应

这篇文章是关于低温条件下p-GaN高电子迁移率晶体管&#xff08;HEMTs&#xff09;栅极漏电的研究。文章通过电容深能级瞬态谱&#xff08;C-DLTS&#xff09;测试和理论模型分析&#xff0c;探讨了空穴陷阱对栅极漏电电流的影响。以下是对文章的总结&#xff1a; 摘要&#xf…

本地认证的密码去哪了?怎么保证安全的?

1. windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff1f;密文存在哪个文件下?该文件是否可以打开&#xff0c;并且查看到密文&#xff1f; 系统将输入的明文密码通过hash算法转为哈希值&#xff0c;且输入的值会在内存中立即删除无法查看。 然后将密文存放在C:…

基于Spring Boot的火车订票管理系统设计与实现

基于Spring Boot的火车订票管理系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 前台首页功能界面图&#xff0c;在系统首页可以查看…

ROS机器人小车建模仿真与SLAM(5)

目录 一、ROS中使用摄像头 1.1 验证摄像头设备可用 1.2 安装cheese 1.3 测试 二、获取摄像头驱动包 2.1 usb_cam 2.1.1 rosrun方式运行 2.1.2 roslaunch方式运行 三、摄像头标定(camera calibration) 3.2 标定前准备 3.2.1 标定板 3.2.2 摄像头调焦 3.3 标定摄像头…

MySQL__索引

文章目录 &#x1f60a; 作者&#xff1a;Lion J &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_69252724 &#x1f389; 主题&#xff1a; MySQL__索引&#xff09; ⏱️ 创作时间&#xff1a;2024年04月23日 ———————————————— 这里写目…

avl excite python二次开发1--python解释器需用内置解释器aws_cmd

avl excite python二次开发1--python解释器需用内置解释器aws_cmd 1、python解释器问题1.1、用外置python解释器&#xff0c;import WSInterface会失败(WSInterface.pyd)1.2、用内置解释器aws_cmd运行py脚本1.3 用内置解释器aws_python执行脚本三级目录 1、python解释器问题 1…

Python_AI库 Pandas的数据结构及基本操作

Python_AI库 Pandas的数据结构及基本操作 本文默认读者具备以下技能&#xff1a; 熟悉python基础知识&#xff0c;vscode或其它编辑工具 熟悉表格文件的基本操作 具备自主扩展学习能力 本文篇幅较长&#xff0c;但比较重要&#xff0c;希望读者可以认真看完并实例运行。 Pa…

Hugging Face 新开源Parler-TTS,高质量文本转语音模型,可自主训练定制声音,训练代码、模型、数据集全部公开

前言 Parler-TTS 是大名鼎鼎的huggingface推出的一款轻量级文本到语音&#xff08;TTS&#xff09;模型&#xff0c;它能够生成高质量、自然流畅的语音&#xff0c;并且能够模仿特定说话者的风格&#xff0c;包括性别、音高、说话风格等。这款模型是由Dan Lyth和Simon King创建…

【机器学习原理】决策树从原理到实践

基于树的模型是机器学习中非常重要的一类模型&#xff0c;最基础的就是决策树&#xff0c;本篇主要讲述决策树的原理和几类最常见的决策树算法&#xff0c;这也是更复杂的树模型算法的基础。 参考文章&#xff1a; 1.CSDN-基于熵的两个模型(ID3,C4.5)比较详细&#xff0c;有数字…

PotatoPie 4.0 实验教程(22) —— FPGA实现摄像头图像对数(log)变换

什么是图像的log变换&#xff1f; 总的来说&#xff0c;对数变换是一种常用的图像增强技术&#xff0c;可以改善图像的视觉质量、减少噪声以及突出图像中的细节&#xff0c;从而提高图像在视觉感知和分析中的效果和可用性。 图像的对数变换&#xff08;log transformation&am…

【Linux命令行艺术】1. 初见命令行

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

Anti Rookit -- 检测隐藏进程

Anti Rookit 一&#xff1a;检测隐藏进程 引言 检测隐藏进程除了众所周知的枚举进程ID之外&#xff0c;还有枚举句柄表的方式。不过今天给大家带来的是第三种方法。 探究 应用层通过接口 C r e a t e P r o c e s s \textcolor{cornflowerblue}{CreateProcess} CreateProcess…

【Linux系统编程】26.信号、kill、alarm、setitimer

目录 信号 信号共性 信号特质 产生信号 信号相关概念 默认处理动作 信号4要素 常规信号 ​编辑 注意 kill 参数pid 测试代码1 测试结果 测试代码2 测试结果 alarm 参数seconds 返回值 取消闹钟 测试代码3 测试结果1 测试结果2 ​编辑 setitimer 参数…

BIO、NIO与AIO

一 BIO 同步并阻塞(传统阻塞型)&#xff0c;服务器实现模式为一个连接一个线程&#xff0c;即客户端有连接请求时服务器端就需要启动一个线程进行处理. BIO&#xff08;Blocking I/O&#xff0c;阻塞I/O&#xff09;模式是一种网络编程中的I/O处理模式。在BIO模式中&#xf…

物联网实战--平台篇之(一)架构设计

本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html 一、平台简介 物联网平台这个概念比较宽&#xff0c;大致可以分为两大类&#x…

网络攻击日益猖獗,安全防护刻不容缓

“正在排队登录”、“账号登录异常”、“断线重连”......伴随着社交软件用户的一声声抱怨&#xff0c;某知名社交软件的服务器在更新上线2小时后&#xff0c;遭遇DDoS攻击&#xff0c;导致用户无法正常登录。在紧急维护几小时后&#xff0c;这款软件才恢复正常登录的情况。 这…