初始化项目
初始化-pnmp[根据自己需要, npm或者yarn都可以,包管理这里不做限制]
包管理器 pnmp, 做包的初始化配置
pnpm init
安装依赖
pnpm i vite -D
运行项目
启动 Vite 的时候使用 npx。这是一个 Npm5.2 新增加的命令,用于执行软件包中的可执行文件
本地新建一个index.html入口
npx vite
Vite 默认只能支持 TS 代码。而 Vue 的模板需要在编译阶段转换为 Typescript 代码 (渲染函数)才可以运行。Vue 插件不但提供了模板的编译,同时还支持 Vue 单文件 (SFC) 组件的编译
可以通过安装 Vite 的 Vue 插件实现
pnpm i vue
pnpm i @vitejs/plugin-vue -D
开始项目工程化配置
自定义组件-h函数- vue支持
import { defineComponent, h } from "vue";
//之所以使用h函数,因为 Vue3.0 默认的包是不支持模板编译功能的。也就是说, template 语法现在还不能用。在 Vue3.0 中编译功能推荐在构建阶段完成,而不是放到浏览器中运行
export default defineComponent({
name: "SButton",
// template:'<button>MyButton</button>'
render() {
return h("button", null, "MyButton");
},
});
自定义组件-SFC组件-template模板编译-@vitejs/plugin-vue
<template>
<button>SFC Button</button>
</template>
<script lang="ts">
export default {
name: "SFCButton",
};
</script>
自定义组件-JSX组件支持- @vitejs/plugin-vue-jsx
import { defineComponent, h } from "vue";
export default defineComponent({
name: "JSXButton",
render() {
return <button>JSX Button</button>;
},
});
配置组件入口
import MyButton from "./button";
import SFCButton from "./SFCButton.vue"; // 关于ts类型警告,通过.d.ts声明文件去除警告
import JSXButton from "./JSXButton";
import { App } from "vue";
// 导出单独组件
export { MyButton, SFCButton, JSXButton };
// 编写一个插件,实现一个install方法
export default {
install(app: App): void {
app.component(MyButton.name, MyButton);
app.component(SFCButton.name, SFCButton);
app.component(JSXButton.name, JSXButton);
},
};
vite配置
const rollupOptions = {
external: ["vue", "vue-router"],
output: {
globals: {
vue: "Vue",
},
},
};
export default defineConfig({
...
// 添加库模式配置
build: {
rollupOptions,
minify: false,
lib: {
entry: "./src/entry.ts",
name: "WebkuborUI",
fileName: (format) => `webkubor-ui.${format}.js`,
// 导出模块格式
formats: ["es", "umd", "iife"], //3.0之前版本是["esm", "umd", "iife"]
},
},
})
设置快捷命令-script
"scripts": {
"serve": "vite",
"build": "vite build"
},
测试打包
那么这三个打包导出方式是什么呢
测试 打开路径: http://localhost:5173/demo/esm/index.html
pnpm run dev