npm+模块加载机制

1.包:Node.js的第三方模块叫做包
2.包的来源:第三方个人或团队【免费开源】
3.包是基于内置模块封装出来的,极大地提高了开发效率,包与内置模块之间的关系==JQuery与API之间的关系
4.包的下载:
(1)https://www.npmjs.com【搜索包】
(2)https://regidtry.npmjs.org【下载包】

npm

1. 在项目中安装指定包的名称:
npm install 包的完整名称【 npm i 包的完整名称】

 npm i moment

测试代码:

const moment=require('moment')
const dt= moment().format('YYYY-MM-DD HH:mm:ss'); 
console.log(dt);

文件夹:
(1)node_modules:用于存放所有已安装到项目中的包
(2)package-lock.json配置问价:用来记录node_modules目录下的每一个包的下载信息【包的名字,版本号,下载地址等】
2.如果要安装特定版本的包:npm i 包的完整名称@版本号
包的版本号:点分十进制 一共三位数字
第一位数字:大版本
第二位数字:功能版本
第三为数字:Bug修复版本
版本号提升规则:只要前面的版本号增长了,则豁免的版本号归0
3.快速创建package.json
快捷命令可以在执行命令所处的目录中,快速创建package.json包的管理配置文件:

npm init -y

注意:上述的命令只能在英文的根目录下成功运行。“不能出现中文,空格
当我们运行安装包的命令时,npm会自动把包的名称和版本号记录到package.json中”

4.dependecies节点用来记录用npm install命令安装了那些包
5.一次性安装所有包:.dependecies节点中有包的名字 直接执行npm install就可以一次性安装所有的包
6.卸载包:npm uninstall 包的完整名称【执行命令之后会将包的名称自动从.dependecies节点中移除】
7.devDependencies节点:如果某些包只在项目开发会用到,在项目上线后不会使用到,则可以将这些包记录devDependencies节点中

npm i 保命 -D

npm install 包名 --save-dev

8.淘宝NPM镜像服务器
1.下包镜像源:下包的服务器地址
2.命令:
(1)查看当前的下包镜像源:
npm config get registry
(2)将下包的镜像源切换为淘宝镜像源
npm config set registry https://registry.npm.taobao.org
(3)检查镜像源是否下载成功
npm config get registry
9.nrm

  • 通过npm包管理器,将nrm安装为全局可用的工具
  • npm i nrm -g
  • 查看所有的镜像源
  • nrm ls
  • 将下载包的镜像源切换为taobao镜像

包的分类

1.项目包:安装到node_modules目录中的包
(1)开发依赖包:被记录到devDependencies节点中的包,只在开发期间会用到【npm i 包名 -D】
(2)核心依赖包:被记录到的dependencies节点下的包,在开发阶段和项目上线后都会用得到【npm i 包名】
2.全局包:运行npm i命令时,如果提供了-g就会把把包安装成全局包
全局包安装的地址:
C:\Users\Administrator\AppData\Roaming\npm\node_modules
安装全局包命令:npm i 包名 -g
卸载全局包命令:npm uninstall 包名 -g
3.i5ting_toc:可以将md文档转为html页面的小工具
步骤:
(1)将i5ting_toc安装为全局包:npm i -g i5ting_toc
(2)调用i5ting_toc轻松实现md 转化为html的功能
i5ting_toc -f 要转换的md的文件路径 -o

规范的包结构

①包必须以单独的目录而存在
②包的顶级目录下要必须包含package.json这个包管理配置文件
③package.json中必须包含name【包的名字】 version【版本号】 main【包的入口】这三个属性

开发包

初始化包的基本结构
①新建一个文件夹,作为包的根目录
②在这个文件夹中新建如下三个文件:

  • package.json(包管理配置文件)
  • index.js(包的入口文件)
  • README.md(包的说明文档)
    初始化package.json
  • name:包的名称【名称不能重复】
  • version:包的版本号 默认1.0.0
  • main:包的入口文件
  • description:包的简短描述信息
  • keyword:包的关键字【数组;字符串】
  • license:遵循的开源许可协议【ISC】
{
    "name": "itheima-tools",
    "version": "1.0.0",
    "main": "index.js",
    "description": "提供了格式化时间,HTMLEscape相关的功能",
    "keywords": ["itheima",,
    "dateFormat",
    "escape"
],
"license": "ISC"
}

在index.js中定义格式化时间的方法
步骤:
(1)定义一个格式化时间的方法
(2)定义一个补零的函数
(3)向外暴露一个对象

// 格式化事件的函数
function dateFormat(datestr){
    const dt=new Date(datestr);
    // 获取年月日
    const y= Zero(dt.getFullYear())
    const m= Zero(dt.getMonth()+1)
    const d= Zero(dt.getDate())
    // 获取时分秒
    const hh= Zero(dt.getHours())
    const mm= Zero(dt.getMinutes())
    const ss= Zero(dt.getSeconds())

    return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}
function Zero(n){
    return n>9?n:'0'+n
}
module.exports={
    dateFormat
}

测试

const m2=require('./index')
const datstr=m2.dateFormat(new Date())
console.log(datstr);

将不同的功能进行模块拆分

步骤:
①将格式化时间的功能拆分到src->dateFormat.js中
②将处理字符串的功能拆分到src->htmlEscape.js中
③在index.js中,导入两个模块 得到需要向外共享的方法
④在index.js中使用module.exports把对应的方法共享出去
index.js代码

const datastr=require('./src/dateFormate')
const htmlstr=require('./src/htmlEscape')

// 转义HTML

module.exports={
   ...datastr,
   ...htmlstr
}

编写包的说明文档

##安装
'''
npm insall itheima-tools
'''
##导入
'''js
const itheima-tools=require('itheima-tools)
...
##格式化时间

//调用dateFormat对时间进行格式化
const datstr=m2.dateFormat(new Date())
console.log(datstr);


##HTML字符的转义

//调用HTMLEscapr方法对HTML字符串进行转义
const htmlstr='

这是h1标签123 


const str=m2.HTMLEscapr(htmlstr)
console.log(str);

##HTML转义字符的还原

//调用htmlUnEscape方法来对HTML字符串进行还原
const strhtml=’<h1 title=“abc”>这是h1标签<span&gt123&ampnbsp;</span&gt</h1>’
const str2=m2.htmlUnEscape(strhtml)
console.log(str2);

发布包

1.将包发布到npm上:切换到包所在的根目录,执行命令 npm publish
2.删除已发布的包:npm unpublish 包名 --force

模块的加载机制

1.有限从缓存中加载:模块在第一次加载后会被缓存【多次调用require()不会导致模块中的代码被执行多次】—提高模块的加载效率
2.内置模块的加载机制:内置模块的加载优先级最高【如果我们自定义的第三方模块也叫fs那么遇到内置模块中的fs时,优先加载内置模块】
3.自定义模块的加载机制:使用require()加载自定义模块式,必须以./或者…/开头
如果没有,那么node会把它当做内置模块或第三方模块进行加载
4.第三方模块的加载机制:Node会从当前模块的根目录开始,尝试从/node_modules文件夹中加载第三方模块
如果没有找到对应的第三方模块,则会移动到再上一层的父目录中,进行加载,知道文件系统的根目录
目录作为模块的加载机制

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值