npm与包
一、包
1.包是什么?
Node.js中的第三方模块又叫做包
2.包是干啥的?
由于Node.js的内置模块仅仅提供了一些底层的API,导致内置模块进行项目开发时,效率很低。包是基于内置模块封装出来的,提供更高级的API,极大地提高了开发效率。
3.包的下载
当在终端执行npm -v
命令,查看自己电脑上安装的npm包管理工具的版本号,若成功显示,即可以使用npm命令下载想要的包了。
二、npm初体验
1.在项目中安装包的命令
npm insatll 包的完整名称
简写格式
npm i完整包的名称
2.eg:对时间格式化
//1.导入需要的包
//2.导入的名称,就是装包时候的名称
const moment = require('moment')
const dt = moment().format('YYYY-MM-DD HH:mm:ss')
console.log(dt);
3.安装指定版本的包
默认情况下,使用npm指令安装的时候,会自动安装最新版本的包,如果安装指定版本的时候,通过@符号指定具体版本
如:npm i moment@2.22.2
三、包管理配置文件
1.如何记录项目中安装了哪些包
项目根目录中,创建一个叫做package.json的配置文件,即可以用来记录项目中安装了哪些包,从而方便剔除node_modules目录之后,在团队成员之间共享项目的源代码
快速创建package.json:
npm init -y
此命令只能在英文的目录下成功运行,目录中不要有空格。
2.一次性安装所有的包
可以运行npm install
命令一次性安装所有的依赖包。
执行这个命令时,npm创建管理工具会先读取package.json中的dependencies节点,读取到记录的所有依赖包的名称和版本号之后,npm包管理工具会把这些包一次性下载到项目中。
3.devDependencies节点与dependencies节点
项目开发阶段会用到的包,在上线之后不会用到,记录在devDependencies.某些包在开发和项目上线之后都需要用到,则建议把这些包记录到dependencies节点中。
安装指定包,记录到devDependencies节点中(简写形式):
npm i 包名 -D
完整形式
npm install 包名 --save-dev
4.nrm
方便切换下载包的镜像源
npm i nrm -g
(通过npm包管理器,将nrm安装为全局可用的工具)
nrm ls
(查看所有可用的镜像源)
nrm use taobao
(将下载包的镜像切换为taobao镜像)
5.包的分类
5.1.项目包
安装到项目node_modules目录中的包
- 开发依赖包:记录到devDependencies节点中的包,只在开发期间用到(
npm i 包名 -D
) - 核心依赖包:记录到dependencies节点中的包,在开发和项目上线之后都会用到(
npm i 包名
)
5.2.全局包
只有工具性质的包才有全局安装的必要,如nrm
在执行 npm install命令时,若提供了-g参数,会把包安装成全局包。
路径:C:\Users\用户名\AppData\Roaming\npm\node_modules
指令:npm i 包名 -g
6.规范的包结构
- 包必须以单独的目录而存在
- 包的顶级目录下必须要包含package.json这个包管理配置文件
- package.json中必须有name,version ,main这三个属性,分别代表包的名字、版本号、入口文件
四、开发属于自己的包
1.创建包
eg:格式化时间
package.json文件格式初始化代码如下
{
"name": "itheima-tools",
"version": "1.0.0",
"main": "index.js",
"description": "提供了格式化事件",
"keywords": [
"itheima",
"dataFormat",
"escape"
],
"license": "ISC"
}
入口文件index.js内容:
//这是包的入口文件
//定义格式化事件的方法
function dateFormat(dateStr) {
const dt = new Date(dateStr)
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
}
测试代码如下test.js:
const itheima = require('./index')
//格式化时间功能
const dtStr = itheima.dateFormat(new Date())
console.log(dtStr);
测试结果:
2.发布包
先在npm官网注册:https://www.npmjs.com/
注册完毕在vscode终端进行登录
把包发布到npm网站上:
将终端切换到包的根目录之后,运行npm publish
命令,即可将包发布到npm上(包名不能雷同)
删除已发布的包
运行npm unpublish 包名 --force
命令,即可删除已经发布的包(72小时内发布的包可以删除)