当前位置: 首页 > news >正文

上传Vue3+vite+Ts组件到npm官方库保姆级教程

文章目录

  • 新建项目
    • 1、vite创建项目
  • 编写组件
    • 1、删除无用代码
    • 2、新建文件夹LiButton,
    • 3、新建抛出文件
    • 4、新建组件
    • 5、index.ts内容
    • 6、下载UI组件
  • 上传组件
    • 1、更改vite.config.ts文件
    • 2、打包
    • 3、上传操作
    • 4、上传
  • 使用组件
    • 1、 下载
    • 2、 引用
    • 3、使用

新建项目

1、vite创建项目

npm create vite@latest demo-test(项目名称)
我的项目名称叫做demo-test,大家创建的时候可以根据自己的名称来创建

下一步,框架选择vue,选择后回车
在这里插入图片描述
然后语言选择TypeScript,选择后回车
在这里插入图片描述
然后会出现三个指令,这三个指令是依次执行的

cd demo-tese 进入demo-test文件夹
npm installl 然后下载依赖
npm run dev 最后启动项目

执行上述的三个指令以后,就会出现启动的地址,然后Ctrl按住,点击地址,就能出现项目了
在这里插入图片描述
在这里插入图片描述

编写组件

1、删除无用代码

App.vue中,红框部分都可删除
在这里插入图片描述
删除后,页面全空白状态并且无报错,表示正确
同时也删除components中的HelloWord.vue组件
在这里插入图片描述
删除后页面是全白状态

2、新建文件夹LiButton,

在components下新建文件夹,我这里做个测试,就起名 LiButton,大家叫任何名字都可以,层级关系如下,

在这里插入图片描述

3、新建抛出文件

然后在LiButton,下面建立Buttons,文件夹,名字也可随意,大家按照自己下习惯来就好,然后再LiButton文件夹中,建立index.ts文件,层级关系如下,index.ts和Buttons文件夹是同级的

在这里插入图片描述

4、新建组件

然后在Buttons文件夹下,新增NewTestButton.vue文件,这个NewTestButton文件,就是编写组件代码的地方,我这里只写一个组件,所以就只增加了一个,如果想要发布多个组件在一个包里的话,可以多编写几个组件,层级如下

在这里插入图片描述

5、index.ts内容

// components->LiButton->index.ts
import NewButton from './Buttons/NewTestButton.vue'
// 如果有多个组件,可以在这里添加,比如cesbutton,记得引入
//  const components = [NewButton,cesbutton];
const components = [NewButton];
const install = (app: any) => {components.forEach((component) => {app.component(component.name , component);});
};export { NewButton };
export default { install };

6、下载UI组件

如果需要借助其他UI,可以提前下载,我这里用iview做例子,iview地址
进入官网,安装->NPM安装,找到指令,

在这里插入图片描述

在项目中的终端中输入指令,下载组件,
在这里插入图片描述

看到这样,就是下载成功了, 官网有介绍,可以查看引入方法

在这里插入图片描述

然后进入项目的main.ts,可看到主要加入的代码是以下

import ViewUIPlus from 'view-ui-plus'
import 'view-ui-plus/dist/styles/viewuiplus.css'
// main.ts 整体代码
import { createApp } from 'vue'
import './style.css'
import ViewUIPlus from 'view-ui-plus'
import 'view-ui-plus/dist/styles/viewuiplus.css'
import App from './App.vue'
createApp(App).use(ViewUIPlus).mount('#app')

然后就可以用这个里面的所有UI了,比如我就使用几个按钮,

// components->LiButton->Buttons->NewTestButton.vue
<script setup lang="ts">
import { } from "vue"
</script>
<script lang="ts">
export default {name: 'libuttons', // 显式定义 name ,这里一定要写
}
</script>
<template><Space direction="vertical"><Space wrap><Button>Default</Button><Button type="primary">Primary</Button><Button type="dashed">Dashed</Button><Button type="text">Text</Button></Space><Space wrap><Button type="info">Info</Button><Button type="success">Success</Button><Button type="warning">Warning</Button><Button type="error">Error</Button></Space></Space>
</template><style lang="scss" scoped></style>

然后此刻的页面还是空的,是正常的,

注意:vue组件中的name一定要写,因为在页面使用的时候,用的名称就是这个name
然后再main.ts中引用,试试写的idnex.ts是否生效

import LiButton from './components/LiButton'
createApp(App).use(ViewUIPlus).use(LiButton).mount('#app')

然后再APP.vue文件中,引用这个组件

<script setup lang="ts">
</script><template>
<libuttons></libuttons>
</template><style scoped></style>

这个时候,页面上就有画面了,说明抛出的各种方法都写正确了
在这里插入图片描述

上传组件

1、更改vite.config.ts文件

前提:

下载以下依赖
npm i path

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from "path";
export default defineConfig({plugins: [vue()],build: {outDir: "test-demo-button", //输出文件名称,名称是自定义的lib: {entry: path.resolve(__dirname, "./src/components/LiButton/index.ts"), //指定组件编译入口文件,根据自己项目的路径来name: "test-demo-button",fileName: "test-demo-button",},rollupOptions: {external: ["vue"],output: {// 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量globals: {vue: "Vue",},}}}
})

2、打包

然后执行打包指令,一般情况都是build,可在package.json中看到
在这里插入图片描述

如果出现以下的报错,看自己本身的node是否匹配vite,解决方法就是将node升级最新版本即可
在这里插入图片描述

如果本地安装有nvs的话,就可以使用nvs控制node版本,也可以使用其他的切换工具,怎么方便怎么来

nvs -ls 查看版本
nvs use 版本号 切换版本
node -v 查看是否切换成功

在这里插入图片描述

切换成功以后,在执行打包指令
yarn build
出现这样的,就表示打包成功了,
在这里插入图片描述
此刻可以看到项目目录中多了一个文件,test-demo-button
在这里插入图片描述

3、上传操作

终端先进入这个打包后的文件夹,因为当前还在根目录下
在这里插入图片描述

然后执行 npm init -y // 创建package.json文件
在这里插入图片描述
看到这样出现,即表示创建成功,然后更改版本号

// test-demo-button->package.json
// 我个人一半是从0.0.1开始的,如果偏好从1.0.0开始的,可以不用更改"version": "0.0.1",
// 然后增加  "types" 字段
// 目的:告诉 TypeScript 编译器:类型定义文件(.d.ts)的位置(这里是 types/index.d.ts)。
// 这样,其他开发者在使用你的库时,能获得 代码提示、类型检查 等 TypeScript 支持。"types": "types/index.d.ts",

即全部的test-demo-button->package.json文件如下

// test-demo-button->package.json
{"name": "test-demo-button","version": "0.0.1","main": "test-demo-button.js","types": "types/index.d.ts","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC","description": ""
}

因为增加了types类型检查,所以需要增加文件,types文件夹,然后再文件夹下增加index.d.ts文件,层级如下
在这里插入图片描述

index.d.ts文件中如下

// test-demo-button->types->index.d.ts
import { App, Component, Plugin } from 'vue';// 定义 About 组件的类型
declare const libuttons: Component; // libuttons是定义的组件的名字,在vue文件的name属性中// 定义安装函数类型
declare const install: Plugin & {installed?: boolean;
};// 导出类型
export { libuttons };//  libuttons是定义的组件的名字,在vue文件的name属性中
export default install;

4、上传

终端中输入指令,
注意:记得切换到官方镜像文件

 npm config set registry https://registry.npmjs.org/npm publish

确保当前路径是在打包后的文件夹中,
在这里插入图片描述
看到当前,即表示组件上传成功

使用组件

1、 下载

使用vite.config.ts中的name下载依赖,记得将路径切换到根目录,因为刚刚上传依赖的时候路径在打包后的文件,所以需要切换到根目录中,不然就下载到打包后的文件中了

// 我这里的名字是 test-demo-button,
npm i test-demo-button

在这里插入图片描述

然后看到根目录下的package.json,可以看到下载成功了,
在这里插入图片描述

2、 引用

在main.ts中,

import { createApp } from 'vue'
import './style.css'
import ViewUIPlus from 'view-ui-plus'
import 'view-ui-plus/dist/styles/viewuiplus.css'
// 引入的文件,如果依赖包中有CSS,也记得引入,可以在node/modueles文件夹下,下载的依赖包中看到
// 因为我这个简单,所以没有css文件,下图可以看到,如果有的话记得引入
import NewButton from 'test-demo-button' import App from './App.vue'createApp(App).use(ViewUIPlus).use(NewButton).mount('#app')

在这里插入图片描述

3、使用

页面中使用的还是vue中的name属性,作为组件名

<script setup lang="ts">
</script><template>
<libuttons></libuttons> // 这是我的name,大家可以看到
</template><style scoped></style>

然后页面上就有自己的内容了
在这里插入图片描述
到此,vue3+vite+ts的组件上传npm库以及下载使用的教程就结束啦,感谢观看

http://www.dtcms.com/a/269115.html

相关文章:

  • python高级变量XIV
  • 【数据结构之哈夫曼树与编码实现】
  • 【Linux操作系统】简学深悟启示录:Linux基本指令
  • OpenStack扩展
  • 05. study_JSBridge机制
  • 7.7日 实验03-Spark批处理开发(2)
  • Playfun即将开启大型Web3线上活动,打造沉浸式GameFi体验生态
  • C++11标准库算法:深入理解std::none_of
  • 低代码平台的性能测试实践与挑战
  • qiankun 微前端项目中的 Token 鉴权方案
  • python dict list 去重
  • 【数据驱动视角下的流体模拟:CFD 与深度学习(GANs/PINN)在圆柱绕流及机翼分析中的应用】
  • Video Background Remover V3版 - AI视频一键抠像/视频换背景 支持50系显卡 一键整合包下载
  • 动手学深度学习13.7. 单发多框检测(SSD)-笔记练习(PyTorch)
  • Pycharm恢复默认设置,配置导致复制粘贴等不能使用
  • 气候大模型的演化路径与产业落地展望:AI重构全球气候科学的新范式
  • 在bash shell 函数传递数组的问题
  • CSS知识复习4
  • 卷积神经网络:卷积层的核心原理与机制
  • MATLAB | 绘图复刻(二十一)| 扇形热图+小提琴图
  • C++11中的std::ratio:编译时有理数运算的艺术
  • 暑假算法日记第三天
  • WebRTC与RTMP
  • iOS App抓包工具排查后台唤醒引发请求异常
  • Python编译器(Pycharm Jupyter)
  • MySql:多表查询——子查询
  • 【应急响应】Linux 自用应急响应工具(LinuxCheckShoot)
  • 腾讯地图 vue3 使用 封装 地图组件
  • 赛事开启|第三届视觉语音识别挑战赛 CNVSRC 2025 启动
  • 自动驾驶ROS2应用技术详解