创建、发布npm包,并且应用在项目里面

实现一个函数去监听dom宽高的变化,并且发布NPM包,然后使用到项目中

步骤

1.5W3H 八何分析法

2.如何监听dom宽高变化

3.如何用vite 打包库

4.如何发布npm

一、NPM包新建过程

查看完整目录

1.生成 package.json

复制代码
npm init

生成TS配置文件 tsconfig.json

复制代码
 npm install typescript npx tsc --init

新建vite.config.ts

复制代码
import { defineConfig } from 'vite'
//globals  umd 支持 amd cmd cjs 全局变量模式

export default defineConfig({
    build: {
        lib: {
          // Could also be a dictionary or array of multiple entry points
          entry: 'src/index.ts',
          name: 'useResize',
          // the proper extensions will be added
        //   fileName: 'my-lib',
        },
        rollupOptions: {
          // 确保外部化处理那些你不想打包进库的依赖
          external: ['vue'],
          output: {
            // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
            globals: {
                useResize: 'useResize',
            },
          },
        },
      },
})

写功能src/index.ts

复制代码
import { App, defineComponent, onMounted } from 'vue'
 
function useResize(el: HTMLElement, callback: (cr: DOMRectReadOnly,resize:ResizeObserver) => void) {
    let resize: ResizeObserver
        resize = new ResizeObserver((entries) => {
            for (let entry of entries) {
                const cr = entry.contentRect;
                callback(cr,resize)
            }
        });
        resize.observe(el)
}
 
const install = (app: App) => {
    app.directive('resize', {
        mounted(el, binding) {
            useResize(el, binding.value)
        }
    })
}
 
useResize.install = install
 
export default useResize

新建index.d.ts 编写声明文件

复制代码
// 声明文件
declare const useResize: {
    (el: HTMLElement, callback: Function): void;
    install: (app: App) => void;
};

export default useResize

装进依赖里面devDependencies npm i vite -D 装进依赖里面devDependencies

复制代码
npm i vue -D 

编写配置

最后 打包,package.json 添加配置 require import 查找

复制代码
npm run build 

"main": "dist/v-resize-tc.umd.js",
"module": "dist/v-resize-tc.mjs",

配置哪些文件需要发布到npm

复制代码
"files": [ "dist", "index.d.ts" ],

配置版本号,每次发布需要修改

复制代码
"version": "0.0.1",

package.json完整代码

复制代码
{
  "name": "v-resize-tc",
  "version": "0.0.2",
  "description": "实现一个函数同时支持 hook 和 自定义指令 去监听dom宽高的变化",
  "main": "dist/v-resize-tc.umd.js",
  "module": "dist/v-resize-tc.mjs",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "vite build"
  },
  "author": "tangce",
  "files": [
    "dist",
    "index.d.ts"
  ],
  "license": "ISC",
  "dependencies": {
    "typescript": "^5.1.6"
  },
  "devDependencies": {
    "vite": "^4.4.4",
    "vue": "^3.3.4"
  }
}

.npmignore忽略发布

复制代码
# .npmignore
/node_modules
/src

二、发布NPM

1.注册账号

复制代码
npm adduser

2.登录账号

复制代码
npm login

3.打包

复制代码
npm run build

4.输入 发布NPM

复制代码
npm publish

常见错误情况处理-403,地址切换问题

通过安装nrm依赖包,管理和切换镜像地址:

复制代码
npm install -g nrm

安装后,输入以下指令,切换到官方源地址

复制代码
nrm use npm

发布完成后,再切换回淘宝镜像地址

复制代码
nrm use taobao

查看当前地址

复制代码
npm get registry

查看当前用户名

复制代码
npm whoam i

附上代码及截图

三、项目中使用包


引入包

复制代码
npm i v-resize-tc -D

具体使用情况

复制代码
<template>
  <a href="https://www.npmjs.com/package/v-resize-tc">https://www.npmjs.com/package/v-resize-tc</a>
  <div class="resizeBox">
    https://www.npmjs.com/package/v-resize-tc
  </div>
</template>
<script setup lang='ts'>
import useResize from 'v-resize-tc'
import { onMounted } from 'vue'
onMounted(() => {
  useResize(document.querySelector('.resizeBox') as HTMLElement, (e:any) => {
    console.log(e)
  })
})
</script>
<style scoped lang='scss'>
.resizeBox{
  width: 300px;
  height: 300px;
  border: 1px solid #ccc;
  resize: both;
  overflow: hidden;
}
</style>
相关推荐
IT_陈寒6 分钟前
被Java的final坑惨了,这些细节你可能也忽略了
前端·人工智能·后端
kyriewen29 分钟前
我带着DeepSeek Harness跑了一周真实需求——这份避坑速查表请收好
前端·ai编程·deepseek
计算机魔术师34 分钟前
OpenAI不单独发o3了,Altman说GPT-5才是终局
前端
一座古城1 小时前
Claude Code 架构源码解析:AI 应用开发的范式跃迁
前端·后端
K哥爬虫1 小时前
【JS 逆向百例】Vaptcha V4 手势验证码逆向分析
前端·后端
用户921080262861 小时前
复盘 AI Coding 工作台的流式链路:从 Sender 输入到 SSE 分流,再到 BubbleList 和右侧预览
前端
了不起的小明1 小时前
SwiftMesh:本地 3D 模型查看器,加密交付 + 转盘录屏一站式搞定,开源免费
前端
默_笙1 小时前
👍 我的代码被 ESLint 抓包了:单引号、var、没分号——全被当场点名
前端·javascript
搞个锤子哟1 小时前
vue项目引入icon的问题
前端
树上有只程序猿1 小时前
当低代码遇上AI,一个开发者的真实感悟
前端