node之包(第三方模块)

news2024/10/7 5:31:38

目录

安装包的命令

卸载包的命令

devDependencies节点

解决下包速度慢的问题 

导入moment包案例

包的分类

项目包

全局包

模块的加载机制

优先从缓存中加载

内置模块的加载机制

自定义模块的加载机制

第三方模块的加载机制 

目录作为模块 


包是由第三方个人或团队开发出来的,Node.js 中的包都是免费且开源的,不需要付费即可免费下载使用。

为什么需要包

  • 由于Node.js的内置模块仅提供了一些底层的API,导致在基于内置模块进行项目开发的时,效率很低。
  • 包是基于内置模块封装出来的,提供了更高级、更方便的API,极大的提高了开发效率。

搜索包:https://www.npmjs.com/

下载包: https://registry.npmjs.org/

安装包的命令

npm install 包名[@版本号]  简写为  npm i 包名[@版本号]

注:版本号省略则下载最新版

卸载包的命令

npm uninstall 包名

devDependencies节点

如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到devDependencies 节点中。

与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到dependencies节点中。

您可以使用如下的命令,将包记录到devDependencies节点中:

解决下包速度慢的问题 

在使用npm下包的时候,默认从国外的 https://registry.npmjs.org/服务器进行下载,此时,网络数据的传输需要经过漫长的海底光缆,因此下包速度会很慢。

查看npm下载地址:npm config get registry

切换npm的下包镜像源

导入moment包案例

执行如下命名:

 此时项目中就会出现如下两个文件:

 package-lock.json文件中就存放了下了那些包以及下载的版本和下载的地址等待信息

注意:程序员不要手动修改node modules 或 package-lockjson文件中的任何代码,npm包管理工具会自动维护它们.

const moment = require('moment') // 导入moment
const nowtime = moment().format('YYYY MM DD : HH mm ss') // 使用moment中的api获取当前时间
console.log(nowtime)

包的分类

项目包

那些被安装到项目的node modules目录中的包,都是项目包。

项目包又分为两类,分别是:

  • 开发依赖包(被记录到devDependencies节点中的包,只在开发期间会用到)
  • 核心依赖包(被记录到dependencies节点中的包,在开发期间和项目上线之后都会用到)

 

全局包

在执行npm install命令时,如果提供了-g参数,则会把包安装为全局包。

全局包会被安装到C:\Users\用户目录\AppData\Roaming\npm\node modules目录下。

模块的加载机制

优先从缓存中加载

模块在第一次加载后会被缓存。这也意味着多次调用require()不会导致模块的代码被执行多次。

注意:不论是内置模块、用户自定义模块、还是第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率。

内置模块的加载机制

内置模块是由Node.js 官方提供的模块,内置模块的加载优先级最高。

例如,require("fs')始终返回内置的fs模块,即使在node_modules目录下有名字相同的包也叫做fs。

自定义模块的加载机制

使用require()加载自定义模块时,必须指定以』或../开头的路径标识符。在加载自定义模块时,如果没有指定/或../这样的路径标识符,则 node会把它当作内置模块或第三方模块进行加载。

同时,在使用require()导入自定义模块时,如果省略了文件的扩展名,则Nodejs 会按顺序分别尝试加载以下的文件:

  1. 按照确切的文件名进行加载
  2. 补全.js扩展名进行加载
  3. 补全.json扩展名进行加载
  4. 补全.node扩展名进行加载
  5. 加载失败,终端报错

第三方模块的加载机制 

如果传递给require()的模块标识符不是一个内置模块,也没有以‘”或‘./”开头,则Node,js 会从当前模块的父目录开始,尝试从/node_modules文件夹中加载第三方模块。

如果没有找到对应的第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录。

例如,假设在'C:\Users\itheimalproject\foojs'文件里调用了require('tools'),则 Node.js 会按以下顺序查找:

  1. C:\Users\itheimaproject\node_modules\tools
  2. C:\Users\itheima\node_modules\tools
  3. C\Users\node_modules\tools
  4. C:\node_modules\tools

目录作为模块 

当把目录作为模块标识符,传递给require()进行加载的时候,有三种加载方式:

  • 在被加载的目录下查找一个叫做 package.json的文件,并寻找main属性,作为require()加载的入口
  • 如果目录里没有package.json文件,或者main入口不存在或无法解析,则 Node.js将会试图加载目录下的 indexjs文件。
  • 如果以上两步都失败了,则Node.js 会在终端打印错误消息,报告模块的缺失:Error: Cannot find module 'xo'

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

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

相关文章

c/c++:char*定义常量字符串,strcmp()函数,strcpy()函数,寻找指定字符,字符串去空格

c/c:char*定义常量字符串,strcmp()函数,strcpy()函数,寻找指定字符,字符串去空格 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c的话, 我所…

《基于深度迁移学习的可穿戴睡眠阶段分类》阅读笔记

一、摘要 佩戴可穿戴设备进行睡眠监测是一种无创、便捷的方法,可以提高睡眠障碍筛查和健康监测的效率。然而,由于缺乏大规模、标准化的PPG数据集,使用PPG进行睡眠阶段分类仍然具有挑战性。本文提出了一种基于深度迁移学习的方法来解决这个问…

类对象的大小---this指针

如何计算类对象的大小 问题:类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了什么?如何计算一个类的大小? 类对象的存储方式 只保存成员变量,成员函数存放在公共的代码段 结论&#xf…

不得不说的结构型模式-装饰器模式

目录 装饰器模式是什么 下面是装饰器模式的一个通用的类图: 以下是使用C实现装饰器模式的示例代码: 下面是面试中关于桥接器模式的常见的问题: 下面是问题的答案: 装饰器模式是什么 装饰器模式是一种结构型设计模式&#xff…

数据分析中常见标准的参考文献

做数据分析过程中,有些分析法方法的标准随便一搜就能找到,不管是口口相传还是默认,大家都按那样的标准做了。日常分析不细究出处还可以,但是正式的学术论文你需要为你写下的每一句话负责,每一个判断标准都应该有参考文…

一步一步教你部署hexo博客网站

先看效果: 目录 一、官网 二、安装Git和Node(最好是最新版本) 三、找个放项目的地方:新建一个文件夹 hexo并在该目录下执行命令 四、用WebStorm打开hexo文件夹 五、启动项目 六、打包(如果重复打包,每次打包之前&#xff0c…

学电路设计时,你遇到过什么有趣的事?

说几个学生时代的傻x事: 1、以前对DC-DC懂得少,而且一般开关电源芯片小,还有一堆外围,手焊很麻烦,就觉得三端稳压器碉堡了啊,一个就能得到想要的电压啊,有木有。然后就各种用三端稳压器。那玩意…

音频处理库大PK:四种主流库在计算mel频谱时性能如何?

目录 介绍测试脚本注意警告 性能Linux - AMDLinux - IntelmacOS - IntelmacOS - M1 总结 介绍 音频信号处理在各种应用中都发挥着重要的作用,如语音识别、音乐信息检索、语音合成等。其中,Mel频谱是一种常用的频域特征表示方法,用于描述人类…

【Hello Network】网络编程套接字(四)

作者:小萌新 专栏:网络 作者简介:大二学生 希望能和大家一起进步 本篇博客简介:简单介绍下TCP通讯过程 文章目录 简单的TCP英译汉服务器更改handler方法 地址转换函数字符串转化整型IP整数IP转化字符串 绑定失败问题TCP协议通讯流…

贪吃蛇小游戏(C++)

首先我们需要下载EasyX(具体的方法在EasyX专栏中有提到) easyX下载和绘制简单基本图形_小梁今天敲代码了吗的博客-CSDN博客 贪吃蛇这个游戏我们一定都玩过,玩家使用方向键操控一条“蛇”,蛇会朝着一个方向不断移动,玩…

主成分分析

一、案例与数据 某研究者对企业员工进行调查,并且制定了一份问卷,研究者想要将问卷中的多个量表题进行浓缩以便后续分析,比如休假制度、资金制度、工资水平或者晋升制度等等,其中部分数据如下: 二、分析问题 其实想要…

时序预测 | MATLAB实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆网络时间序列预测

时序预测 | MATLAB实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆网络时间序列预测 目录 时序预测 | MATLAB实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆网络时间…

前端已死还是“娱乐至死”?做个清醒的前端

目录 一、前言 二、为什么会出现“前端已死”的观点? 1、技术变化太快: 2、前端工程化带来的挑战: 3、新技术的崛起: 三、前端该如何提升自己 1、学习新技术: 2、掌握前端工程化: 3、参与社区和开…

远程网关桥接模式实现同一局域网组网管理(Superlink)

远程网关桥接模式配置介绍及示例 功能简述 智联物联远程网关桥接模式,是指电脑侧Superlink远程工具及前端ZP网关通过4G/WAN/WiFi客户端等方式分别接入互联网及后端服务器平台远程服务后,再借助虚拟网卡桥接技术,先由服务器平台下发桥接网络参…

室内定位之5G定位

一、前言 随着5G通信基础设施逐步完善,5G网络的优势一方面在于其具有的更大的带宽和子载波间隔,使得5G室内定位精度提升(3.5GHz频段下定位精度在5米左右,毫米波定位精度可以达到3米或更高),相对于其他定位技术,已建成…

解决docker启动mysql无法输入中文以及中文不显示或乱码问题

前言 我在使用MySQL时,遇到了两个问题。一是在插入中文数据时,无法输入中文。二是在select的时候,查出来的中文数据是空的(因为插入时为空),然后我就使用Navicat连接数据库添加了中文数据,再到…

【MySQL】联合查询子查询以及合并查询的使用

目录 上篇在这里喔~ GROUP BY分组子句与联合查询的使用详解 联合查询步骤 1.自连接 1.查询每位同学的计算机原理和Java的成绩 2.显示所有计算机原理成绩比java成绩高的成绩信息 2.子查询 1.单行子查询 1.查询’许仙‘的同班同学 2.多行子查询 1.查询语文或英语课程的…

综合管廊智慧运维管理平台应用研究

摘要:为提升综合管廊运维管理水平,实现管理的数字化转型,采用综合监测系统、BIMGIS 可视化系统、智能机器人巡检、结构安全监测等技术,搭建实时监控、应急管理、数据分析等多功能为一体的智慧管廊运维管理平 台,为综合…

Python爬虫基础之二

Python爬虫基础包括HTTP协议、HTML、CSS和JavaScript语言基础、requests库的使用、Beautiful Soup库的使用、xpath和正则表达式的使用等。此外,还应该了解反爬虫机制和爬虫的一些常见问题及解决方法。 上一篇文章讲解了有关条件判断语句、循环语句等相关知识&#…

stm32串口中断流程

NVIC简介 内嵌向量中断控制器:Nested Vectored Interrupt Controller (NVIC) 硬件发生中断后,相关电信号会触发内核跳转中断向量表查找中断函数, 中断向量名查于汇编文件startup_stm32xxx.s文件 从本质上说这里就是数字电路的组合形成的一系列行为,当相关中断的寄存…