返回

Node.js(笔记07) - 包和包管理工具(npm)

发布时间:2022-12-31 00:22:32 257
# javascript# json# git# github# 服务器

什么是包

Node.js 中的第三方模块又叫做包。

就像电脑和计算机指的是相同的东西,第三方模块和包指的是同一个概念,叫法不同。


包的来源

不同于 Node.js 中的内置模块和自定义模块,包是由第三方个人或团队开发出来的,免费使用。

注意:Node.js 中的包都是免费且开源的,不需要付费即可免费下载使用,香。


为什么需要包

由于Node.js的内置模块仅提供了一些底层的API,导致在基于内置模块进行项目开发时,效率很低。

包是基于内置模块封装出来的,提供了更高级、更方便的 API,极大的提高了开发效率。

包和内置模块之间的关系,类似于 JQuery 和浏览器内置API之间的关系;


哪里下载包

国外有家IT公司,叫 npm,Inc. 这公司旗下网站: ​​https://www.npmjs.com​​/ 是全全球最大包共享平台。

Node.js(笔记07) - 包和包管理工具(npm)_Node.js

官方搜 bootstrap 、JQuery、express 等著名插件和框架;

该公司提供了一个地址为 ​​https://registry.npmjs.com​​ 的服务器,来对外共享所有包;

提示:

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

下包:​​https://registry.npmjs.com​​/

国内镜像(阿里云):​​https://developer.aliyun.com/mirror/NPM​​

http://npmmirror.com
http://registry.npmmirror.com


如何下载包

使用包管理工具,npm(Node Package Manager),这工具随 Node.js 一起安装;

在终端,通过  ​npm -v​ 来看下当前 npm 的版本号:

> npm -v

Node.js(笔记07) - 包和包管理工具(npm)_包管理_02

推荐阅读:

​​NPM 简介、安装、配置、常用方法​​


npm 初体验


格式化时间的传统做法

1)创建格式化时间的自定义模块

2)定义格式化时间的方法

3)创建补零函数

4)从自定义模块中导出格式化时间的函数

5)导入格式化时间的自定义模块

6)调用格式化时间的函数


代码实现:创建 dateFormat.js

// 定义格式化时间函数
function dateFormat(dateStr) {
const dt = new Date(dateStr)
const y = dt.getFullYear(dt)
const m = padZero(dt.getMonth() + 1)
const d = padZero(dt.getDay())

const hh = padZero(dt.getHours())
const mm = padZero(dt.getMinutes())
const ss = padZero(dt.getSeconds())

// YYYY-MM-DD HH:MM:SS
return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}
// 补零函数
function padZero(n) {
return n > 9 ? n : "0" + n
}
// 暴露方法
module.exports={
dateFormat
}

引入模块:

// 引入模块
const TIME = require('./dateFormat')

// 获取时间
const dt = new Date()
// console.log(new Date());
// 2022-12-23T17:09:26.155Z

// 调用方法
const newDT = TIME.dateFormat(dt)
console.log(newDT);
// 2022-12-06 01:12:30

时间格式从原来的

// 2022-12-23T17:09:26.155Z
变为
// 2022-12-06 01:12:30

这种实现,需要自己手写个模块,还是比较麻烦。


格式化时间高级做法

1)使用npm,在项目中安装格式化时间的包 moment

2)使用 require() 导入格式化时间的包

3)参考 moment 官方的API 文档对时间进行格式化


安装 moment 

> npm install moment

Node.js(笔记07) - 包和包管理工具(npm)_Node.js_03

引入包

// 引入模块
const moment = require('moment')

参考文档

NPM官网:​​https://www.npmjs.com/package/moment​​

github官网:​​github.com/moment/moment​​

moment官网:​​momentjs.com​​

使用文档:​​​​https://momentjs.com/docs/#/use-it/node-js/​​

var moment = require('moment'); // require
moment().format();

参数文档:​​https://momentjs.com/docs/#/parsing/string-format/​​

文档非常详细,这里直接使用:

// 引入模块
const moment = require('moment')
const dt1 = moment().format('YYYY-MM-DD HH:mm:ss')
const dt2 = moment().format('YYYY-MM-DD h:m:s')
console.log(dt1); //2022-12-24 01:34:29
console.log(dt2); //2022-12-24 1:34:29


初次安装包后多了哪些文件

在项止文件夹中多了一个 node_modules 文件夹和 package-lock.json 的配置文件。

node_modules 文件夹

用来存放所有已安装到项目中的包

require() 导入第三方包时,就从这个目录中查找并加载包

package-lock.json 配置文件

用来记录 node_modules 目录下的每一个包的下载信息,如:包名、版本号、下载地址等

看下这个配置文件:

{
"name": "nodejs",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"dependencies": {
"moment": "^2.29.4"
}
},
"node_modules/moment": {
"version": "2.29.4",
"resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
"engines": {
"node": "*"
}
}
}
}

注意:不要手动修改 node_modules 或 package-lock.json 文件中的代码,npm会自动维护它们;


安装指定版本的包

默认情况下,使用 npm install 命令安装包的时候,会自动安装最新版本的包。

如果需要安装指定版本的包,可以在包名之后,通过  ​@符号​ 指定具体的版本,如:

> npm i moment@2.22.2

当前最新版本是 2.29.4 ,这个 package-lock.json 配置文件中也可以看到。 

执行指定版本的安装,不需要卸载原版本,执行完后,可以在 package-lock.json 文件中看到版本已经更新;

查看 moment 最新版本的命令:

> npm view moment version

Node.js(笔记07) - 包和包管理工具(npm)_包管理_04

显示最新版本是  2.29.4

再执行一次不带版本的安装命令,就可以重新安装回最新版本:

> npm i moment

同时 package-lock.json 也自动维护为最新版本信息;


包的语义化版本规范

包的版本号是以“点分十进制”形式进行定义的,总共有三位数字,如: 2.29.4

第一位数字:大版本;

第二位数字:功能版本;

第三位数字:Bug修复版本;

版本号提升的规则:只要前面的版本号增长了,则后面的版本号归零。如:​2.29.4 => 2.30.0


特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
Failed to mount /sysroot XFS Boot failure 2022-12-30 23:36:28