IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> lerna+rollup搭建vue组件库并发布到npm -> 正文阅读

[JavaScript知识库]lerna+rollup搭建vue组件库并发布到npm

一、框架介绍

1. lerna

Lerna 是一个管理工具,用于管理包含多个软件包(package)的 JavaScript 项目。

目的是将大型代码仓库分割成多个独立版本化的软件包。
官网点这里

2. rollup

Rollup 是一个 JavaScript 模块打包工具,可以将多个小的代码片段编译为完整的库和应用。

官网点这里

二、项目准备

1. 新建项目

首先你需要创建一个vue项目,我这里以vue3为例,初始化项目目录大概是下面这样的:
在这里插入图片描述

2. 改造一些目录:

# 创建目录 packages
mkdir packages

# 文件夹重命名 
mv src  examples

目录变成酱紫:
在这里插入图片描述
examples 目录用于存放示例代码;
packages 目录用于存放组件库代码;

注意修改src目录相关的代码即可,这里不做赘述

三、编写组件

在packages目录下创建自己的组件,结构可参考:
在这里插入图片描述
以my-table为例:
packages/my-table/src/main.vue,自定义的vue组件

<template>
  <h2>表格组件</h2>
  <table border style="border-collapse: collapse">
    <tr>
      <th>000</th>
      <th>000</th>
      <th>000</th>
      <th>000</th>
    </tr>
    <tr>
      <td>111</td>
      <td>111</td>
      <td>111</td>
      <td>111</td>
    </tr>
    <tr>
      <td>222</td>
      <td>222</td>
      <td>222</td>
      <td>222</td>
    </tr>
    <tr>
      <td>333</td>
      <td>333</td>
      <td>333</td>
      <td>333</td>
    </tr>
  </table>
</template>

<script>
import { defineComponent } from "vue";
export default defineComponent({
  name: "my-table",
  mounted() {
    console.log("my-table 初始化");
  },
});
</script>

packages/my-table/index.js,主要就是为了引入src中的vue组件

import MyTable from "./src/main.vue";

MyTable.install = function (Vue) {
  Vue.component(MyTable.name, MyTable);
};

export default MyTable;

四、测试组件

为了后面的步骤顺利进行,先对我们创建好的组件进行一下简单的测试;
examples/main.ts

import { createApp } from 'vue'
import App from './App.vue'

import MyTable from "../packages/my-table"
import MyInput from "../packages/my-input"

import './assets/main.css'

createApp(App).use(MyTable).use(MyInput).mount('#app')

examples/App.vue

<template>
  <main>
    <my-table></my-table>
    <my-input></my-input>
  </main>
</template>

运行项目,看到如下效果,可真是谢天谢地了
在这里插入图片描述
到这里,说明我们封装的组件库(勉强这么称呼吧)已经可以正常使用了,接下来就是打包、发布了。

五、打包

多个组件库分别创建 package.json,用于管理各自的打包命令、依赖等。

cd packages/mytable && npm init -y

cd packages/my-input && npm init -y

1. 安装rollup相关依赖

yarn add rollup rollup-plugin-vue -D

多个组件库分别创建rollup配置文件,并添加配置
packages/my-table/rollup.config.js

import vue from "rollup-plugin-vue";

export default {
  input: "./index.js",
  output: [
    {
      file: "dist/index.js",
      format: "es",
    },
  ],
  plugins: [vue()],
};

2. 修改根目录下package.json

修改根目录下的package.json中的打包命令,并指定工作空间为 packages 目录

{
  "scripts": {
    "build": "yarn workspaces run build",
    ...
  },
  "workspaces": [
    "packages/*"
  ],
  "private": true,
  ...
}

3. 修改各组件库package.json

修改各组件库的package.json中的打包命令,可根据自己需要,修改其他属性。本示例修改了type和main:

{
  "type": "module",
  "main": "./dist/index.js",
  "scripts": {
    "build": "rollup -c"
  },
  ...
}

4. 执行打包命令

在根目录执行打包命令

yarn build

不出意外的话,在各自的组件库目录中会多了一个dist目录,这就是我们根据rollup配置文件打包的结果。

接下来修改 examples/main.ts 中的引用路径,验证一下打包后的组件。

import { createApp } from 'vue'
import App from './App.vue'

// import MyTable from "../packages/my-table"
// import MyInput from "../packages/my-input"
import MyTable from "../packages/my-table/dist/index.js"
import MyInput from "../packages/my-input/dist/index.js"

import './assets/main.css'

createApp(App).use(MyTable).use(MyInput).mount('#app')

打开页面,发现
在这里插入图片描述
嘿,怎么和刚才一模一样???没错,这说明打包成功了。
不相信你可以修改一下 dist/index.js 中的 console.log 代码,验证一下是否生效。

到这里,打包的任务就完成了,接下来我们就准备发布吧…

六、发布

1. 安装lerna

yarn add lerna -D -W

2. lerna初始化

lerna init

此时会发现根目录多了一个 lerna.json 文件

3. 发布

执行如下代码即可发布

lerna publish

控制台出现如下结果就代表发布成功了
在这里插入图片描述
接下来就到npm官网查看你自己的组件库吧,是不是满满的成就感?!

附:本文没提到的那些事儿

  1. rollup提供了很多类似于rollup-plugin-vue的插件,可应用于不同的场景,根据自己需要进行安装使用;
  2. 发布组件库(执行 lerna publish)需要npm账号,并在本地登录;
  3. 源码点这里
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 10:59:18  更:2022-12-25 11:01:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/20 9:17:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码