vite+vue3发布自己的npm组件+工具函数

记录一下个人最近一次发布npm组件的过程:

一、创建组件和工具函数

  1. 执行命令创建一个空项目: npm create vite 创建过程稍微有些慢,不知何故?其中选择vue , 个人暂时使用的JS 。
  2. 在 src 目录下面创建一个文件 package 存放组件和公共的JS方法

案例中 table 是放组件的, utils 是放方法的。

table组件 里面的主要内容就是个人业务组件,随便写点

复制代码
<template>
  <input type="text" v-model="MyValue">
  <div>
    结果:{{ MyValue }}
  </div>
  <button @click="handelEvent"> 测试按钮 </button>
</template>

<script setup>
import { ref } from "vue";
const MyValue = ref("");
const emit = defineEmits(["testBtn"]);
const handelEvent = () => {
  emit("testBtn", MyValue.value);
};
</script>

<script>
export default {
  name: "eosBtn",
};
</script>

这里遇到一个疑问,组件名称的暴露:必须通过下面的方式。

复制代码
export default {
  name: "eosBtn",
}; 

我最开始用的组合式api 直接暴露的,竟然无法使用,如有知道原因的,还请赐教一下。

复制代码
<script setup name="eosBtn"> </script>

函数方法,utils文件 也随便写一个:

复制代码
// indes.js
import { handleFirstUpperCase } from "./utils.js";
export default { handleFirstUpperCase };


// utils.js
/* 
* 首字母转大写
*/
export function handleFirstUpperCase(str) {
    return str.replace(/( |^)[a-z]/g, (L) => L.toUpperCase());
}
  1. 开始暴露出去组件和方法,在package 下的index.js 写

    import eosBtn from './table/index.vue'
    import EUtils from './utils/index.js'

    const components = [eosBtn]
    const install = function (Vue) {
    components.map(el => {
    Vue.component(el.name, el) // 注册组件
    })
    }
    export default { install, EUtils }

  2. 本地自测,还是在当前的项目下,在main.js 里面引入和注册组件以及方法

    import { createApp } from 'vue'
    import './style.css'
    import App from './App.vue'
    import testUi from './package/index.js'
    const app = createApp(App)

    app.config.globalProperties.EUtils = testUi.EUtils; //公共方法
    console.log(testUi);
    app.use(testUi.install)
    app.mount('#app')

  3. 在app.vue 中使用组件进行测试

二、发布组件

  1. 设置包的名称,版本,导出路径等相关信息, 在package.json

    {
    "name": "eos-tms-base",
    "private": false,
    "version": "0.0.5",
    "type": "module",
    "files": [
    "dist/*",
    "eos-tms-base.d.js"
    ],
    "main": "dist/eos-tms-base.umd.js",
    "module": "dist/eos-tms-base.es.js",
    "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
    },
    "dependencies": {
    "vue": "^3.3.11"
    },
    "devDependencies": {
    "@vitejs/plugin-vue": "^4.5.2",
    "vite": "^5.0.8"
    }
    }

  2. 设置vite.config.js

    import { defineConfig } from 'vite'
    import vue from '@vitejs/plugin-vue'

    // https://vitejs.dev/config/ https://juejin.cn/post/7257144279050403896
    export default defineConfig({
    plugins: [vue()],
    build: {
    rollupOptions: {
    // 请确保外部化那些你的库中不需要的依赖
    external: ['vue'],
    output: {
    // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
    globals: {
    vue: 'Vue',
    },
    },
    },
    lib: {
    entry: 'src/package/index.js',
    name: 'eos-tms-base',
    fileName: (format) => eos-tms-base.${format}.js,
    },
    },
    })

  3. 执行打包命令,打包发布:npm run build 打包后的文件

  4. 接着就是登录npm, 执行命令 npm login , 没有账户的自行注册,上传失败的,检查npm 代理路径是否为官方的,如果是淘宝镜像需要自行切换到官方才可使用,包名是否已经在插件市场存在。

设置 npm 的 registry 为官方源 npm config set registry https://registry.npmjs.org

  1. 到npm 官网查看是否发布成功。

最后就是创建一个空项目,自己下载插件,进行引入,自测。
npm i eos-tms-base

相关推荐
Setsuna_F_Seiei9 小时前
前端转型 Agent 开发 06 之 Agent Memory 记忆系统(让 Agent 更智能,更懂你)
前端·agent·ai编程
zhangzeyuaaa10 小时前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
默_笙10 小时前
🌊 向量库和 ES 都查不出"关系",我只好给奶茶建了一张人脉网
前端·javascript
优选资讯11 小时前
标签打印软件怎么对接 Excel 数据
前端·excel
一个风轻云淡12 小时前
GCC 和 GDB命令简单解读
java·linux·前端
u01110267512 小时前
图片处理接口如何统一错误信息 前端提示与后端错误码设计
前端·状态模式
福兮说13 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
libokaifa13 小时前
把语音模型塞进手机:sherpa-onnx 在 Android 上的 ASR / TTS
前端
deli00713 小时前
DLA 枝晶生长实测:5000 个粒子集体停摆之后,分形维数收敛到 1.70
前端
IT_陈寒13 小时前
Redis卡顿的锅,这次真不是大key的错
前端·人工智能·后端