【Node.js】开发自己的包!

开发自己的包!
初始化包的基本结构
  • 新建文件夹。作为包的根目录
  • 文件夹中,新建三个文件
    – package.json(包管理配置文件)
    – index.js(包的入口文件)
    – README.md(包的说明文档)
  • 初始化package.json
{
    
    
    "name": "lusheng-pack",//包名,包名不能和网址里的包名重复
    "version": "1.0.0",//版本号
    "main": "index.js", //包的入口文件,导入根据main,找到index.js
    "description": "功能说明",//搜索包的时候的简短描述信息
	 "keywords": ["lusheng"],//搜索关键字,必须双引号,单引号报错
    "license": "ISC"//所遵循的开源许可协议,默认ISC
}
  • index.js
//包的入口文件,记录不同方法

//定义格式化时间的方法,传入日期时间
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
}
//定义转义HTML的方法,接收html
function gethtmlStr(Str) {
    
    
    return Str.replace(/<|>|"|&/g, (match) => {
    
    
        switch (match) {
    
    
            case '<':
                return '&lt;'
            case '>':
                return '&gt;'
            case '"':
                return '&quot;'
            case '&':
                return '&amp;'
        }
    })
}
//定义还原HTML的方法,接收转义语句
function sethtmlStr(Str) {
    
    
    return Str.replace(/&lt;|&gt;|&quot;|&amp;/g, (match) => {
    
    
        switch (match) {
    
    
            case '&lt;':
                return '<'
            case '&gt;':
                return '>'
            case '&quot;':
                return '"'
            case '&amp;':
                return '&'
        }
    })
}
//向外暴露的成员
module.exports = {
    
    
    getTime,
    gethtmlStr,
    sethtmlStr
}
页面使用
const pack = require("./index.js")
const str = `< h1 title='html语句'><span>转义啊?"&amp</span></h1>`
console.log(pack.gethtmlStr(str))
console.log(pack.sethtmlStr(pack.gethtmlStr(str)))

在这里插入图片描述

根据需要也可以将模块化拆分

在这里插入图片描述

  • index.js中
//包的入口文件,记录不同方法
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,都失败,则会打印错误信息,报告模块的缺失

猜你喜欢

转载自blog.csdn.net/weixin_44899940/article/details/129055178