开发自己的包!
初始化包的基本结构
- 新建文件夹。作为包的根目录
- 文件夹中,新建三个文件
– package.json(包管理配置文件)
– index.js(包的入口文件)
– README.md(包的说明文档)
- 初始化package.json
{
"name": "lusheng-pack",
"version": "1.0.0",
"main": "index.js",
"description": "功能说明",
"keywords": ["lusheng"],
"license": "ISC"
}
function getTime(time) {
const dt = new Date(time)
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
}
function gethtmlStr(Str) {
return Str.replace(/<|>|"|&/g, (match) => {
switch (match) {
case '<':
return '<'
case '>':
return '>'
case '"':
return '"'
case '&':
return '&'
}
})
}
function sethtmlStr(Str) {
return Str.replace(/<|>|"|&/g, (match) => {
switch (match) {
case '<':
return '<'
case '>':
return '>'
case '"':
return '"'
case '&':
return '&'
}
})
}
module.exports = {
getTime,
gethtmlStr,
sethtmlStr
}
页面使用
const pack = require("./index.js")
const str = `< h1 title='html语句'><span>转义啊?"&</span></h1>`
console.log(pack.gethtmlStr(str))
console.log(pack.sethtmlStr(pack.gethtmlStr(str)))
根据需要也可以将模块化拆分
const DateTime = require("./until/getTime.js")
const htmlStr = require("./until/getStr.js")
module.exports = {
...DateTime,
...htmlStr
}
编写包的说明文档
- 方便用户使用你写的包的说明文件
- 一般包含6项内容
- 1,安装方式
- 2,导入方式
- 3,格式化时间
- 4,特殊注意点
- 5,开源协议
发布包
- 注册npm 账号,网站地址: https://www.npmjs.com/
- 填写账号相关信息,Full Name,Public Email , Username,Password
- 点击Creat an Account 注册
- 登录邮箱,点击验证链接,进行账号的验证
- 注册完,进行终端登录
- 每次登录之前的npm地址得切换到官方服务器地址,不能使用镜像地址,
- npm install -g nrm
- nrm use npm
- 执行 npm login命令,依次输入用户名,密码 ,邮箱后,登录成功,(密码盲打,虽然看不见,但你只管打就行)
- 出现下面情况,得去邮箱拿验证码输入
- 出现这个开头的就是登录成功
把包发布在npm上
- 把终端切换着哎根目录上,运行npm publish命令,即可将包发布到npm上(注意:包名不能雷同)
- cd 根目录名
- npm publish
删除已发布的包
- npm unpublish 包名 --force,即可删除,只能删除72小时内的,
- 通过这样删除的包,24小时内不允许重复发布
模块的加载机制
- 优先从缓存中加载
- 模块在第一次加载后被缓存,这也意味着require()不会导致模块的代码被执行多次
- 不论是内置模块,用户自定义模块,还是第三方模块,她们都会优先从缓存中加载,从而提高模块的加载效率
内置模块的加载机制
- 内置模块的加载优先级最高
- 例如,导入内置 fs模块,自定义模块也有fs,但导入的优先是内置模块的fs
自定义模块的加载机制
- 加载自定义模块时,必须指定以./或者…/开头的路径标识符号,如果不指定,node会把自定义模块当做内置模块或者第三方模块
- 导入自定义模块时候,省略了文件的扩展名,node.js会按照顺序分别尝试加载以下文件
- 1,按照确切的文件名加载
- 2,补全.js扩展名加载
- 3,补全.json扩展名加载
- 4,补全.node扩展名进行加载
- 加载失败,报错
第三方模块的加载机制
- 当既不是内置模块,也不是自定义模块时候,则node.js会从当前模块的父目录开始,尝试查找这个/node_modules文件夹加载第三方模块,找不到,继续往上找上一层父目录,查找node_modules
当目录作为模块时的加载机制
- 1,在被加载的目录下查找一个叫做package.json的文件,并寻找main属性,作为require()加载的入口
- 2,当没有package.json文件或main入口不存在,则node.js会加载目录下的index.js文件
- 3,都失败,则会打印错误信息,报告模块的缺失