npm与包

npm与包

1.什么是包及来源

Node.js中的第三方模块又叫做包,包与Node.js中的内置模块和自定义模块,包是由第三方个人或团队开发出来的

2.为什么需要包

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

3.下载包

在这里插入图片描述

npm

1.格式化时间
1)自定义做法

步骤:

  1. 创建格式化时间的自定义模块
  2. 定义格式化时间的方法
  3. 创建补零函数
  4. 从自定义模块中导出格式化时间的函数
  5. 导入格式化时间的自定义模块

首先我们需要自定义一个格式化时间的方法

//定义格式化时间的方法
function dateFormat(dtstr) {
    const dt = new Date(dtstr)

    const y = dt.getFullYear() //年
    const m = padZero(dt.getMonth() + 1) //月
    const d = padZero(dt.getDate()) //日

    const hh = padZero(dt.getHours()) //小时
    const mm = padZero(dt.getMinutes()) //分钟
    const ss = padZero(dt.getSeconds()) //秒

    return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}

//补零
function padZero(n) {
    if (n > 9) {
        return n
    } else {
        return '0' + n
    }
}

module.exports = {
    dateFormat
}

然后,再用require()模块导入,使用自定义格式化时间方法

//导入自定义的格式化时间模块
const time = require('./格式化时间')

//调用方法,进行时间的格式化
const dt = new Date()//获得当前时间
const newdt = time.dateFormat(dt)//调用dateFormat对时间格式化
console.log(newdt);
2)高级做法——使用第三方包

步骤:

  1. 使用npm包管理工具,在项目中安装格式化时间的包 moment
  2. 使用require()导入格式化时间的包
  3. 参考moment的官方API文档对时间进行格式化

首先,在终端中用npm i moment安装moment包,接下来就可以在项目中使用包,这样出来的效果和我们自定义格式化时间方法出来的效果一样

//导入包
const moment = require('moment')

//使用包
const dt = moment().format('YYYY-MM-DD HH:mm:ss')
console.log(dt);
2.在项目中安装使用包

1.在项目终端中输入npm i 包的名称,就可以完成在项目中安装包
2.在安装好对应包之后,我们肯定要去使用包,可以在npmjs中去搜索下载好的包,在其中就会有如何使用的说明

1)初次装包,多哪些文件

初次装包完成后,在项目文件夹下多一个叫做node_modules的文件夹和package-lock.json的配置文件:

  • node modules 文件夹用来存放所有已安装到项目中的包。require()导入第三方包时,就是从这个目录中查找并加载包。
  • package-lock.json配置文件用来记录node modules目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。
2)安装指定版本包

默认情况下,使用npm install命令安装包的时候,会自动安装最新版本的包。如果需要安装指定版本的包,可以在包名之后,通过@符号指定具体的版本,例如:npm i moment@2.22.2

3.卸载包

运行npm uninstall命令,来卸载指定包,例如:npm uninstall moment就可以卸载安装好的moment包

模块加载机制

1.优先从缓存中加载

模块在第一次加载后会被缓存,这意味着多次调用require()不会导致模块的代码被执行多次,可以提高模块的加载效率

2.内置模块加载机制

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

3.自定义模块加载机制
  • 使用require()加载自定义模块时,必须指定以/或…/开头的路径标识符。在加载自定义模块时,如果没有指定.或…这样的路径标识符,则node会把它当作内置模块或第三方模块进行加载。
  • 同时,在使用require()导入自定义模块时,如果省略了文件的扩展名,则Node.js 会按顺序分别尝试加载以下的文件:

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

4.第三方模块加载机制

如果传递给require()的模块标识符不是一个内置模块,也没有以‘.”或‘./”’开头,则Node,js 会从当前模块的父目录开始,尝试从/node_modules文件夹中加载第三方模块。
如果没有找到对应的第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录。
在这里插入图片描述

5.目录作为模块

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

๑Aurora.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值