npm与包
Node.js中的第三方模块又叫做包,第三方模块和包所指的是统一概念
包的来源不同于Node.js中的内置模块,是有第三方或者个人或团队开发出来的,是免费开源的。
为什么需要包:
Node.js的内置模块只是提供了底层的API,包是通过内置模块封装出来的,通过包,可以提高开发效率。
包的下载方式:
搜索:www.npmjs.com是全球最大的包共享平台,目前1100万开发中开发共享了120多万个不同的包,
下载:此外该公司还提供了一个地址为http://registry.npmjs.org的服务器来下载所需要的包。具体需要通过npm包管理工具进行下载,
该管理工具在安装node.js的时候就一并安装了。在终端中输入npm -v
可以查看当前npm管理工具的版本。
案例:传统方法实现对时间的格式化
一、
// 自定义模块
// 定义格式化时间的方法
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){
return n > 9 ? n : '0' + n
}
// 对外暴露
module.exports = {
dateFormat
}
二、
// 导入自定时格式化时间模块
const TIME = require('./15dateFormat')
// 调用方法进行时间格式化
const dt = new Date()
console.log(dt)// 格式化之前 2022-06-06T05:42:12.025Z
console.log(TIME.dateFormat(dt))// 格式化之后 2022-06-06 13:42:12
案例:利用npm包进行时间格式化
-
使用npm包管理工具安装格式化时间的包:moment包
npm install 包完整名称
命令来安装包,简写形式npm i 包完整名称
-
使用require导入包
-
参考包的API文档对时间进行格式化
// 导入所需要的包,导入的名称就是安装时的包名 const moment = require('moment') // 根据包的文档来使用 const dt = moment().format('YYYY-MM-DD HH:mm:ss'); console.log(dt)
初次装包后的文件
在初次安装了一个包之后,项目文件中会出现一个 node_modules和package-lock.json的配置文件
node_modules:用于存放当前项目中以及三种的按
package-lock.json:用于寂寞node_modules目录下每一个包的下载信息,地址,版本号等
注意:一般不要手动修改配置文件中的代码,npm包管理工具会自动对其维护
安装指定版本的包
npm会自动安装最新版本的包,可以通过如下命令安装指定版本的包:
npm i moment@2.22.2
最新的安装会替换之前的安装
包的语义化版本规范
如版本号为 2.22.2
包的第一位数字为大版本、第二位数字为功能版本、第三位数字为bug修复版本
如果第一位版本号增长,后面的第二位和第三位数字归零。
包管理配置文件
npm规定在项目根目录中必须提供一个packge.json的包管理配置文件,其中记录了项目的名称、版本号、项目中所用的包、开发期间用的包、在开发和部署都要用的包等信息。
多人协作开发的问题
第三方包的体积一般比项目源代码的体积大,所以并不方便团队成员直接的管理与共享。
解决方案:在共享时剔除掉 node_modules目录
如何记录项目中安装了那些包
在项目根目录中,创建一个package.json配置文件用于记录项目中所安装了哪些包,从而方便在剔除node_modules目录后共享代码。
注意:在项目开发中一定要把node_moudules文件夹添加到.gitgnore忽略文件中,再上传到github。
创建package.json文件
使用命令
npm init -y
注意事项:1、上述命令只能在英文的项目目录下运行,不能使用中文。 2、运行npm install命令安装包的时候,npm包管理工具会自动记录包的名称和版本号在package.json中。
在package.json文件中会有一个
dependencies
节点,该节点用来记录当前使用 npm install 命令安装的包"dependencies": { "moment": "^2.29.3"// 属性名为包名,属性值为当前包的版本号 },
一次性安装所有的包
如果一个项目剔除了node_modules后,需要先安装该项目所依赖的所有包。在package.json文件中记录了所有的依赖的包以及版本号。此时只需要运行
npm install
后就可以将所有依赖的包下载安装到项目中。卸载指定的包
使用
npm uninstall 指定的包名
命令来卸载指定的包,uninstall不可简写。卸载包的时候dependencies节点中的包信息也会被删除。devDependencies节点
如果某些包在开发阶段会用到,而部署上线不需要,则需要将该包记录到devDependencies节点当中。如果开发和上线都需要使用,则记录到dependencies节点当中。
npm i 包名 -D
命令可以在安装包的时候同时添加到devDependencies节点。-D是–save-dev的简写。示例:npm i webpack-D / npm install webpack–save-dev
国内下包服务慢
一、应为npm服务器在国外,国内访问下载速度会较慢,利用淘宝的镜像服务器可以提高在国内的npm包下载速度。
npm config get registry
命令可以查看当前的下包的服务器地址。npm config set registry=https://registry.npm.taobao.org/
命令可以更改下包服务器为淘宝镜像地址。二、通过安装nrm工具可以方便快速的查看和切换下包服务器地址
npm i nrm -g
:安装nrmnrm ls
:查看所有可用镜像nrm use taobao
:切换镜像源为淘宝项目包和全局包
项目包就是值得安装在项目中的 node_modules 目录中的包
- 开发依赖包:记录在 devDependencies中的包
npm i 包名 -D
- 核心依赖包:记录在 dependencies中的包
npm i 包名
如果安装npm包的命令后面加入了
-g
参数,则会把包安装为全局包,全局包会被安装到C:/user/用户目录/AppData/Roaming/npm/node_modules 目录中**注意:**只有工具性质的包才有全局安装的必要性,通过官方说明参考是否需要全局安装才能使用。
i5ting_toc包
该工具包是一个可以将md文档转换为html页面的小工具
i5ting_toc -f 要转换文件的路径 -o
:调用转换的功能。 - 开发依赖包:记录在 devDependencies中的包