自定义hook、plugin、directive 三管齐下,使用MutationObserver实现监听dom宽高变化需求,并发布至npm

技术方案

为什么不使用 MutationObserver 而使用了 ResizeObserver ?
原因在于: MutationObserver 主要用于侦听 dom 树中子集的变化、属性的变化、增删改查等,而且其身上属性方法非常多, 在此使用 ResizeObserver 语意将更加明确,就是对 dom 的宽高做监听并作出处理,因此采用 ResizeObserver 。

步骤一

初始化项目结构

在这里插入图片描述

步骤二

安装两个库

在这里插入图片描述

步骤三

在src/index.ts中书写逻辑代码

在这里插入图片描述

步骤四

书写逻辑

在这里插入图片描述

步骤五

如何使用 vite 进行打包 ?
首先配置 vite :

在这里插入图片描述

其次配置 script 打包指令:
在 package.json 中添加一条 script : "build": "vite build"

最后终端执行:npm run build
在这里插入图片描述
打包成功!

步骤六

补充声明文件:
在这里插入图片描述

步骤七

修改package.json文件

// 第一版
"version": "0.0.1",
// require module.exports 模式时使用
"main": "dist/v-resize-wl.umd.js",
// import export 时使用
"module": "dist/v-resize-wl.mjs",
// 只发 npm 所需的包
"files": [
	// 打包后的目录
    "dist",
    // 声明文件
    "index.d.ts"
 ],

步骤八

各单位就绪,准备发布npm。

  1. 首先需要有一个 npm 账号,通过 npm adduser注册一个 npm 账号。
  2. 注册完成后使用 npm login登录,随后使用 npm publish进行发布。

注意 ⚠️: 如果有报错 ➡️ You do not have permission to publish "v-resize-wl". Are you logged in as the correct user? npm ERR! 403 In most cases, you or one of your dependencies are requestingnpm ERR! 403 a package version that is forbidden by your security policy.那是因为包名重复了,换一个包名吧。

发包成功

在这里插入图片描述

演示包的正确性

demo 项目中安装我们自己发的 npm 包:
npm i v-resize-wl778

将包注册为自定义指令:

在这里插入图片描述

vue 代码:

<template>
  <div v-resize="cb" class="box">
    <div class="innerBox">hello,npm</div>
  </div>
</template>

<script setup lang="ts">
// @ts-ignore
import useObserveResize from 'v-resize-wl778'
import { onMounted } from 'vue'
onMounted(() => {
  console.log(document.querySelector('#box'))
  useObserveResize(document.querySelector('#box') as HTMLElement, (e: any) => {
    console.log(e)
  })
})

const cb = (e: any) => {
  console.log(e)
}
</script>

<style scoped lang="scss">
.box {
  margin: 200px auto;
  border: 2px solid #ccc;
  background-color: skyblue;
  resize: both;
  overflow: hidden;
  .innerBox {
    width: 200px;
    height: 200px;
  }
}
</style>

效果: 支持拉伸调整大小
在这里插入图片描述
拖拽调整蓝块大小并查看控制台:
在这里插入图片描述
至此,自定义hook、plugin、directive 三管齐下,使用MutationObserver实现监听dom宽高变化需求,并发布至npm包操作完成✅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WongLeer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值