组件库开发

组件库开发

环境搭建

menorepo

  • pnpm
  • pnpm-workspace
  • lerna 7.4.2 (已全局安装lerna)

1、初始化

1.1 新建项目目录root

1.2 在目录root 使用pnpm初始化packages.json文件,新建 pnpm-workspace.yaml文件, packages/文件夹

pnpm-workspace.yaml有这个文件表示开启工作区。

文件内容如下:

yaml 复制代码
// root/pnpm-workspace.yaml

packages:
 - "packages/*"
json 复制代码
// root/lerna.json

{
    "version": "0.0.0",
    "npmClient": "pnpm"
}

1.3 root/packages/文件夹 中新增子项目,使用lerna create <button>创建button子项目。

​ 或直接新建对应文件夹以及其中的文件...

使用lerna create <button>创建的button子项目内容如下

复制代码
root/
  |
  |packages/
	|
  	|button/
  		|__test__/  测试文件存放
		|src/  项目代码
			|index.vue
		|index.js 入口文件
 		|packages.json
		|READEME.md

root/ packages/ button/ src/ index.vue 文件写入内容

vue 复制代码
<template>
  <h1>this button component 123</h1>
</template>

<script>
export default {
  name: 'ls-button',
  setup() {
  }
}
</script>

root/ packages/ button/ index.js 文件写入内容

js 复制代码
import Button from './src/index.vue'

Button.install = function (app) {
    app.component(Button.name, Button)
}

export default Button

导出该项目中的各组件。

root/ packages/ button/ packages.json 文件写入内容

json 复制代码
{
  "name": "@liindata/ls-button",  // 注意这里的名字,下边要用的
  "version": "0.0.0",
  "description": "> TODO: description",
  "author": "zhangxm <zxumei.com>",
  "homepage": "",
  "license": "ISC",
  "main": "index.js",
  "directories": {
    "lib": "src",
    "test": "__tests__"
  },
  "files": [
    "src"
  ],
  "scripts": {
    "test": "node ./__tests__/button.test.js"
  }
}

1.4 新建 root/play/文件夹。这里用来启动服务,来测试组件或在这里编写组件库的示例文档等等等等

这里使用 vite 来配置开发环境

复制代码
root/play/
	|src/
		|App.vue
		|main.js
	|index.html
	|vite.config.js 

root/ play/ src/ App.vue 文件写入内容

vue 复制代码
<template>
    <h1>monorepo demo 1</h1>
    <lsbutton></lsbutton>
</template>
<script setup>

import Lsbutton from '@liindata/ls-button' // 这里引入我的

</script>

root/ play/ main.js 文件写入内容

js 复制代码
import {createApp} from 'vue'
import App from './App.vue'

const app = createApp(App)

app.mount('#app')

root/ play/ vite.config.js 文件写入内容

js 复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
    plugins: [vue()]
})

这时候准备工作已经ok!

2、依赖安装

经过第一步,肯定有很多疑问,比如使用了 vue、vite 但没有引入。

这里建议思考一下都要安装那些依赖,以及如何启动vite

2.1 安装依赖

复制代码
安装 vite 
pnpm add vite -w
pnpm add @vitejs/plugin-vue -w -D
安装 vue
pnpm add vue -w

进入root/packages/button/中 执行命令, 把button 包软链到根目录。以便其它包使用...

复制代码
pnpm link --dit ../../

执行后,在根目录 root/package.json 中

会自动添加 "@liindata/ls-button": "link:D:/work/liindata-ui-pnpm/packages/button"

完整内容如下。

复制代码
{
	"name": "@liindata/root",
	"scripts": {
		"play": "vite serve ./play" 这里配置root/play 为根目录启动vite
	},
	"dependencies": {
		"@liindata/ls-button": "link:D:/work/liindata-ui-pnpm/packages/button",
		"lerna": "7.4.1",
		"vue": "^3.3.7"
	},
	"devDependencies": {
		"@vitejs/plugin-vue": "^4.4.0",
		"vite": "^4.5.0"
	}
}

pendencies": {

"@liindata/ls-button": "link:D:/work/liindata-ui-pnpm/packages/button",

"lerna": "7.4.1",

"vue": "^3.3.7"

},

"devDependencies": {

"@vitejs/plugin-vue": "^4.4.0",

"vite": "^4.5.0"

}

}

复制代码
执行 pnpm play 即可启动vite
相关推荐
xiaoxiangsiyan几秒前
RHCE之2026年全套考点详解
运维·前端·网络·chrome·学习·rhce
Fluxart.ai6 分钟前
Etsy手工制品换背景,用什么AI能保留手作质感?
前端·javascript·人工智能
小玮看世界24 分钟前
[Python] str() 和 join() 的区别与实战避坑指南
前端·javascript·python
hyf32663329 分钟前
低成本站群泛程序部署:单服务器托管百站稳定运行教程
运维·服务器·前端·搜索引擎·蜘蛛池
程序员黑豆1 小时前
Java正则表达式详解
java·前端·ai编程
不可求~9 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
AC赳赳老秦13 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
谢慧琼13 小时前
2026零基础做企业网站,低成本搭建官方网站
服务器·前端·javascript
weixin_4316004414 小时前
前端数据埋点(1):一次点击如何变成一条埋点
前端·js·数据埋点
IT_陈寒14 小时前
Python线程池吞了异常还不告诉我,这谁顶得住啊
前端·人工智能·后端