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

news2024/11/13 11:24:32

造包

          • 开发自己的包!
          • 初始化包的基本结构
          • 页面使用
          • 根据需要也可以将模块化拆分
          • 编写包的说明文档
          • 发布包
          • 把包发布在npm上
          • 删除已发布的包
          • 模块的加载机制
          • 内置模块的加载机制
          • 自定义模块的加载机制
          • 第三方模块的加载机制
          • 当目录作为模块时的加载机制

开发自己的包!
初始化包的基本结构
  • 新建文件夹。作为包的根目录
  • 文件夹中,新建三个文件
    – 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,都失败,则会打印错误信息,报告模块的缺失

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/352262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3|射频识别技术|第二讲:RFID系统的组成与工作原理|批注·上

https://blog.csdn.net/m0_57656758/article/details/128153964?spm1001.2014.3001.5501我国用无线射频识别技术实现药品管理的市场还是空白其运用具有较大的市场空间。药品运输及存储环境监控药品有效期监控提升用药安全策略血液制剂监控特殊、违禁药品监控商品价格监控药品生…

【Flutter】入门Dart语言:简单易懂的变量指南

文章目录一、概述二、详解1. 变量的声明2. 常量变量3.late 延迟初始化变量4. 变量的命名规则三、总结一、概述 “不抱有希望的人生是毫无意义的。” —— 阿卜杜勒阿齐兹 Dart中的变量是存储值的容器。它们可以是数字、字符串、布尔值或其他数据类型。变量在定义时必须指定类型…

网络原理 (1)

网络原理 文章目录1. 前言&#xff1a; 2. 应用层2.1 XML2.2 json2.3 protobuffer3. 传输层3.1 UDP3.1 TCP4. TCP 内部的工作机制 &#xff08;重点&#xff09;1. 确认应答 2.超时重传3. 连接管理3.1 建立联系 &#xff1a;三次握手3.2 断开连接 : 四次挥手4. 滑动窗口5. 流量…

长按power键,点击重启按钮,系统重启流程一

1.有可能会涉及到如下文件 2.文件流程

Spring基础总结(上)

Spring基础总结(上) 1. Spring 如何创建一个 Bean 对象 通过调用对象的无参构造方法创建一个新对象&#xff0c;然后通过依赖注入得到bean对象(默认单例)依赖注入这一步对新对象中添加了 Autowired 或者Resource 等注解的属性赋值&#xff0c;得到 Bean 对象&#xff0c;如下…

openOffice pdf.js spring boot 微信在线预览office pdf文件

下载openoffice 并安装//pdf.js 案例 https://mozilla.github.io/pdf.js/examples/index.html#interactive-examples//openoffice 连接不上 进入安装目录 cmd 运行以下命令 soffice -headless -accept"socket,host127.0.0.1,port8100;urp;" -nofirststartwizard<!…

技术管理之产品管理

一、产品相关概念 1.1 产品的定义 作为商品提供给市场&#xff0c;被人们使用和消费&#xff0c;并能满足人们某种需求的任何东西&#xff0c;包括有形的物品和无形的服务、组织、观念或者它们的组合&#xff1b;简单点产品就是解决某一类问题的东西。 1.2 产品思维 产品思…

安全研发人员能力模型窥探

能力 是一个比较抽象的概念&#xff0c;不同的行业、管理者、研发人员对能力的认知都会有差异。另外&#xff0c;作为研发团队的相应的职级定级、绩效考核的基础&#xff0c;一个“大家普遍认可”的能力的模型是非常重要的。这是比职级模型更高层的一个基本模型&#xff0c;所谓…

漏洞之S2-048 远程代码执行漏洞(CVE-2017-9791)

一、漏洞详情二、环境搭建1、使用vulhub搭建&#xff0c;搭建方法详见&#xff1a;https://blog.csdn.net/qq_32393893/article/details/129027549?spm1001.2014.3001.55012、切换到vulhub/struts2/s2-0483、启动容器 docker-compose up -d4、访问虚拟机IP:8080端口&#xff0…

智能家居项目(三)之框架设计及框架代码文件工程建立

目录 一、智能家居项目框架设计草图 二、框架代码文件工程建立 三、添加声音识别模块的串口读取功能 一、智能家居项目框架设计草图 代码思路讲解&#xff1a; 1、一个指令工厂&#xff0c;一个控制工厂&#xff0c;实际上就是通过链表链起来的数据。具体怎么链接起来&…

dockerfile自定义镜像安装jdk8,nginx,后端jar包和前端静态文件,并启动容器访问

dockerfile自定义镜像安装jdk8,nginx,后端jar包和前端静态文件&#xff0c;并启动容器访问简介centos7系统里面我准备的服务如下:5gsignplay-web静态文件内容如下:nginx.conf配置文件内容如下:Dockerfile内容如下:run.sh启动脚本内容如下:制作镜像并启动访问简介 通过用docker…

将SpringBoot项目部署到云服务器上面

将jar包部署到云服务器上面在项目中直接双击点击maven里面的package当控制台输出创建成功以后找到target目录下面打好的jar包然后找到jar包所在的文件目录&#xff0c;将该jar包放到服务器里面的apache-tomcat-8.5.82目录里面的webapps目录里面打开安全组开放访问端口服务器里面…

【2023进阶自动化测试第一步】什么是自动化测试基础?

01、自动化测试的定义 使用一种自动化测试工具来验证各种软件测试的需求&#xff0c;它包括测试活动的而管理与实施、测试脚本的开发与执行。 自动化测试只是策是工作的一部分&#xff0c;是对手工测试的一种补充&#xff1a;自动化测试决不能代替手工测试&#xff1b;多数情…

Word处理控件Aspose.Words功能演示:使用 Java 拆分 MS Word 文档

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c;API支持所有流行的Word处理文件…

ASE28N50-ASEMI高压N沟道MOS管ASE28N50

编辑-Z ASE28N50在TO-247封装里的静态漏极源导通电阻&#xff08;RDS(ON)&#xff09;为200mΩ&#xff0c;是一款N沟道高压MOS管。ASE28N50的最大脉冲正向电流ISM为110A&#xff0c;零栅极电压漏极电流(IDSS)为1uA&#xff0c;其工作时耐温度范围为-55~150摄氏度。ASE28N50功…

【实战场景二】如何设计一个分布式锁?

如何优雅的设计一个分布式锁&#xff1f;如何设计一个分布式锁&#xff1f;1、什么是分布式锁2、那么分布式锁&#xff0c;具备什么条件呢&#xff1f;3、设计分布式锁有哪些方式&#xff1f;3.1 利用redis实现分布式锁原理3.2 基于数据库做分布式锁3.3 基于zookeeper实现分布式…

L1-064 估值一亿的AI核心代码

以上图片来自新浪微博。 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序&#xff0c;规则是&#xff1a; 无论用户说什么&#xff0c;首先把对方说的话在一行中原样打印出来&#xff1b;消除原文中多余空格&#xff1a;把相邻单词间的多个空格换成 1 个空格&#xff0c…

如何有效提升微信小程序的排名?

微信小程序排名提升的方法有很多&#xff0c;今天厦门巨神峰给大家分享几点&#xff1a; 1. 加强小程序的用户体验&#xff0c;提升用户满意度&#xff1b; 2. 加强小程序的口碑宣传&#xff0c;提升小程序的知名度&#xff1b; 3. 加强小程序的技术支持&#xff0c;提升小程…

血糖高不高,看皮肤也能知道

糖尿病是一种以高血糖为特征的代谢性疾病。长期存在的高血糖&#xff0c;导致各种组织&#xff0c;特别是眼、肾、心脏、血管、神经的慢性损害、功能障碍。很多人不知道&#xff0c;皮肤也会受到血糖影响。以下就是皮肤发出的警告&#xff1a;1.黑棘皮病&#xff1a;后脖颈、腋…

Docker安全防护与配置

author: aming email: jikcheng163.com title: Docker安全防护与配置 creation_date: 2023-02-08 12:26 Last modified date: 2023-02-08 14:09 tags: Docker安全防护与配置 File Folder with relative path: reading notes/doc remark: other: 本章背景知识 运行在容器内部的…