模块加载机制"/>
npm+模块加载机制
包
1.包:Node.js的第三方模块叫做包
2.包的来源:第三方个人或团队【免费开源】
3.包是基于内置模块封装出来的,极大地提高了开发效率,包与内置模块之间的关系==JQuery与API之间的关系
4.包的下载:
(1)【搜索包】
(2)【下载包】
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 保命 -Dnpm install 包名 --save-dev
8.淘宝NPM镜像服务器
1.下包镜像源:下包的服务器地址
2.命令:
(1)查看当前的下包镜像源:
npm config get registry
(2)将下包的镜像源切换为淘宝镜像源
npm config set registry
(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')// 转义HTMLmodule.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>123&nbsp;</span></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文件夹中加载第三方模块
如果没有找到对应的第三方模块,则会移动到再上一层的父目录中,进行加载,知道文件系统的根目录
目录作为模块的加载机制:
更多推荐
npm+模块加载机制
发布评论