创建项目
pnpm create vite- 输入项目名字 -> 选择vue -> 选择TS
- 按照提示操作
cd jxq-ui
pnpm install
pnpm run dev
创建packages文件夹以及相应文件
编写组件和导出
这是button.vue
<template>
<div class="jxq-button" :class="`jxq-button-${size}`">这是一个button</div>
</template>
<script setup lang="ts">
defineProps({
size: {
type: String,
default: "big"
}
})
defineOptions({
name: "JXQButton"
})
</script>
<style lang="scss" scoped>
.jxq-button {
background-color: #41b883;
color: #fff;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
}
.jxq-button-big {
width: 200px;
height: 50px;
}
.jxq-button-small {
width: 150px;
height: 30px;
}
</style>
这是只导出button.vue的,单组件注册用
// 导入组件,组件必须声明 name
import JXQButton from "./src/button.vue";
import { App} from "vue";
// 为组件添加 install 方法,用于按需引入
JXQButton.install = function (app: App) {
app.component(JXQButton.name!, JXQButton)
return app
}
export default JXQButton
全局注册组件
import { App} from "vue";
import JXQButton from "./components/button/src/button.vue";
import JXQTable from "./components/table/src/table.vue";
import { setupDirective } from "./directives";
const components = [
JXQButton,JXQTable
];
const install = (app: App) => {
components.forEach(component => {
app.component(component.name!, component);
});
return app;
};
export default {
install, setupDirective
};
配置ts
{
"compilerOptions": {
"target": "esnext",
"useDefineForClassFields": true,
"module": "esnext",
"moduleResolution": "Node",
"strict": true,
"noLib": false,
"sourceMap": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"lib": ["esnext", "dom"],
"baseUrl": ".",
"allowJs": true,
"noImplicitAny": true,
"paths": {
"@/*": ["src/*"]
},
// "types": ["vite/client", "element-plus/global"],
"skipLibCheck": true /* Skip type checking all .d.ts files. */,
"allowSyntheticDefaultImports": true /* 允许默认导入 */,
"forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
"jsx": "preserve",
"jsxFactory": "h",
"jsxFragmentFactory": "Fragment"
},
"include": [
"src/**/*.ts",
"src/**/*.vue",
"src/typings/**/*.d.ts",
"mock/**/*.ts",
"vite.config.ts"
],
"exclude": ["node_modules",
"docker/dist", "**/*.js"]
}
vite的库模式
- pnpm add @types/node vite-plugin-dts -D
- pnpm add sass -D
- 构建生产版本 | Vite 官方中文文档
- 配置文件
import { resolve } from 'path'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import dts from 'vite-plugin-dts'
export default defineConfig({
plugins: [vue(), dts({ include: ["./src/packages"]})],
build: {
lib: {
entry: resolve(__dirname, './src/packages/index.ts'),
name: 'JXQUI',
// 将添加适当的扩展名后缀
fileName: 'jxq_ui',
},
rollupOptions: {
// 确保外部化处理那些
// 你不想打包进库的依赖
external: ['vue', 'element-plus'],
output: {
// 在 UMD 构建模式下为这些外部化的依赖
// 提供一个全局变量
globals: {
vue: 'Vue',
},
},
},
},
server: {
port: 8888,
open: true,
}
})
配置package.json
"name": "jxq-ui",
"type": "module",
"version": "0.0.2", 每次publish都要更新
"license": "MIT",
"private": false, 如果是true将只有自己能用
"repository": {
"type": "git",
"url": "https://registry.npmjs.org"
},
"files": ["dist/*"], 设置发布哪些文件到仓库
"main": "dist/jxq_ui.umd.cjs", 使用requir导入使用的
"module": "dist/jxq_ui.js", 使用import导入使用的
"types": "dist/index.d.ts", 类型说明
"keywords": ["jxq"], 搜索关键字
"description": "这是一个基于Vue3和ElementPlus的UI组件库,旨在帮助开发者快速开发基于Vue3的Web应用。", 描述
执行 npm run build 会生成dist文件夹
发布到npm
(yrm ls)
(npm config get registry )
(npm config set registry https://registry.npmjs.org)
npm adduser
npm login
npm whoami
npm publish (npm publish --registry http://localhost:4873)
使用
- 组件库引用了vue, elementplus,需要先安装
import elementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import jxqui from 'jxq-ui'
import 'jxq-ui/dist/style.css'
const app =createApp(App)
app.use(elementPlus)
app.use(jxqui)
- 更新版本后需要重新在项目中修改版本号,执行pnpm i xxx
- 需要重新 npm run dev
- 之后在组件中使用即可
<JXQButton size="big"></JXQButton>
<JXQButton size="small"></JXQButton>
<JXQTable></JXQTable>
- 如果是私仓,需要配置地址
"publishConfig" : {
"registry" : "https://xxxx"
},
关于npm
- ISC许可协议,这意味着任何人可以免费地获取、使用、复制、修改和分发该项目的源代码,只要他们在分发时保留原始的许可声明,并且不对用户提供任何担保,也不承担因使用软件产生的责任。
这种许可方式鼓励代码的共享和再利用,是开源软件生态系统中的常见做法之一。 - MIT许可协议,这意味着任何人可以免费地获取、使用、复制、修改和分发该项目的源代码,只要他们在分发时保留原始的版权声明和MIT许可声明,并且不对用户提供任何担保,也不承担因使用软件产生的责任。 这种许可方式体现了开源软件的核心理念,即开放、自由、合作与共享。
- MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的.