组件的打包和发布(npm、github、gitee)

全局组件打包

1. 打包的配置项

个目录项创建文件【command > build.js】

const path = require("path");
const { defineConfig, build } = require("vite");
const vue = require("@vitejs/plugin-vue");
const vueJsx = require("@vitejs/plugin-vue-jsx");
// 打包入口文件夹
const entryDir = path.resolve(__dirname, "../packages");
// 出口文件夹
const outDir = path.resolve(__dirname, "../lib");

// vite 基础配置
const baseConfig = defineConfig({
  configFile: false,
  publicDir: false,
  plugins: [vue(), vueJsx()],
});

// rollup配置
const rollupOptions = {
  external: ["vue", "vue-router"],
  output: {
    globals: {
      vue: "Vue",
    },
  },
};

// 全量打包构建方法
const buildAll = async () => {
  await build({
    ...baseConfig,
    build: {
      rollupOptions,
      lib: {
        entry: path.resolve(entryDir, "index.ts"),
        name: "mooc-element-components",
        fileName: "mooc-element-components",
        formats: ["es", "umd"],
      },
      outDir,
    },
  });
};


// 打包成库
const buildLib = async () => {
  await buildAll();
};

buildLib();

2. 添加启动脚本命令

// 【package.json】
  "scripts": {
    ...
    "build:components": "node ./command/build.cjs",
    "lib": "npm run build:components"
  },

3.创建入口文件

根目录下创建入口文件【packages】,并将组件模块和相关文件资源放入,【package > index.ts】引入样式文件 

...
import './styles/index.scss'
...

4.vue声明模块

// 【package > vue.d.ts】
declare module '*.vue' {
  import { DefineComponent } from 'vue'
  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
  const component: DefineComponent<{}, {}, any>
  export default component
}

5. 打包

终端输入命令进行打包 `npm run lib`

npm run lib

6. 打包后根目录生成【lib】文件即为打包后的组件包 

7.打包后端组件库使用

项目的入口文档【main.ts】中引入打包后的组件库,配置后通过命令运行`npm run dev`

// 【main.ts】
...
import mUI from '../lib/index'
import '../lib/style.css'
...
app.use(router).use(ElementPlus).use(mUI)
...

单个组件打包

使用时按需引入

1.打包配置(省略代码同全局配置一致)

安装第三方库 `fxExtra` 自动输出文件

cnpm i -D fs-extra
...

const fsExtra = require('fs-extra')
const fs = require('fs')

...

// 单组件打包构建
const buildSingle = async(name)=>{
  await build({
    ...baseConfig,
    build:{
      rollupOptions,
      lib:{
        entry:path.resolve(entryDir,name),
        name:'index',
        fileName:'index',
        formats:['es','umd']
      },
      outDir:path.resolve(outDir,name)
    }
  })
}

// 给每个组件单独生成package.json
const createPackageKJson = (name)=>{
  const fileStr = `
  {
    "name":"${name}",
    "main":"index.umd.js",
    "module":"index.es.js",
    "style":"styles.css",
  }
  `
  // 输出
  // 安装 cnpm i -D fs-extra
   fsExtra.outputFile(
     path.resolve(outDir,`${name}/package.json`),
     fileStr,
     'utf-8'
   )
}

// 打包成库
const buildLib = async () => {
  await buildAll();

  // 获取组件名称组成的数组
  const components = fs.readdirSync(entryDir).filter(name => {
    const componentDir = path.resolve(entryDir,name)
    const isDir = fs.lstatSync(componentDir).isDirectory()
    return isDir && fs.readdirSync(componentDir).includes('index.ts')
  })

  // 循环构建
  for(const name of components){
    await buildSingle(name)
    createPackageKJson(name)
  }
};

buildLib();

2. 运行脚本的命令配置

// 【package.json】
  "scripts": {
    ...
    "build:components": "node ./command/build.cjs",
    "lib": "npm run build:components && cp package.json"
  },

3. 打包

终端输入命令进行打包 `npm run lib`

npm run lib

4. 使用单个组件

// 【main.ts】

...
// 单独引入组件
import chooseIcon from '../lib/chooseIcon/index.js'
import form from '../lib/form/index.js'
import '../lib/chooseIcon/style.css'
import '../lib/form/style.css'
...
app.use(chooseIcon).use(form)

发布组件库到npm

1.配置

【lib > package.json】

{
  "name":"huanyou-element-components",
  "version":"1.0.1",
  "main":"index.umd.js",
  "module":"index.js",
  "types":"index.d.ts",
  "author":{
    "name":"huanyou"
  },
  "keywords":[
    "element-plus",
    "ts",
    "封装组件",
    "二次封装"
  ]
}

2. 声明

告诉使用当前组件库的项目这个组件库是一个vue插件

** 每一个单独组件模块都需引入当前声明文件

【lib > index.d.ts】

import { App } from 'vue'
declare const _default: {
  install(app: App): void
}
export default _default

3. 发布

1. 【lib】目录下打开终端登录npm

npm login

2. 登录成功后,发布

npm publish

4. 发布成功,安装命令

huanyou-element-components - npm

npm i huanyou-element-components

更新已发布版本

1. 更新代码

更新将原入口文件【main.ts】配置的全局注册的icon添加到打包配置内【package > index.ts】,避免用户使用时需要重新配置全局注册icon

// 【packages > index.ts】

import { App } from 'vue'
import chooseArea from './chooseArea/index'
import chooseIcon from './chooseIcon/index'
import trend from './trend/index'
import notification from './notification/index'
import menu from './menu/index'
import progress from './progress/index'
import chooseTime from './chooseTime/index'
import chooseDate from './chooseDate/index'
import chooseCity from './chooseCity/index'
import list from './list/index'
import form from './form/index'
import modalForm from './modalForm/index'
import table from './table/index'
import calendar from './calendar/index'
import './styles/index.scss'
// 全局注册icon
import * as Icons from '@element-plus/icons-vue'

const components = [
  chooseArea,
  chooseIcon,
  trend,
  notification,
  menu,
  progress,
  chooseTime,
  chooseDate,
  chooseCity,
  list,
  form,
  modalForm,
  table,
  calendar
]

export default {
// 遍历所有icon,将icon挂载
  install(app: App) {
    for (let i in Icons) {
      app.component(i, (Icons as any)[i])
    }
    components.map(item => {
      app.use(item)
    })
  }
}

2. 重新打包

npm run lib

3. 重新配置【package.josn】和【index.d.ts】声明 

每一个单独组件模块也需要重新添加声明模块

4.修改版本

// 【lib > package.json】

{
  "name":"huanyou-element-components",
  "version":"1.0.1", // 修改版本
  "main":"index.umd.js",
  "module":"index.js",
  "types":"index.d.ts",
  "author":{
    "name":"huanyou"
  },
  "keywords":[
    "element-plus",
    "ts",
    "封装组件",
    "二次封装"
  ]
}

5. 重新发布 

npm publish

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Hexo 是一个基于 Node.js 的静态博客生成器,它可以帮助你快速搭建个人博客。而 GitHubGitee(码云)则是两个常用的代码托管平台。你可能想知道如何将 Hexo 博客部署到 GitHubGitee 上。 首先,你需要在 GitHubGitee 上创建一个仓库,用于存储你的 Hexo 博客的源码和生成的静态文件。 接下来,你可以按照以下步骤进行操作: 1. 安装 Hexo:在命令行中运行 `npm install -g hexo-cli`,全局安装 Hexo。 2. 初始化 Hexo:在命令行中运行 `hexo init blog`,创建一个名为 "blog" 的文件夹,并初始化 Hexo。 3. 进入博客目录:运行 `cd blog`,进入到该文件夹。 4. 配置 Hexo:编辑 `_config.yml` 文件,配置你的博客信息和需要的插件。 5. 安装依赖:运行 `npm install`,安装博客所需的依赖。 6. 生成静态文件:运行 `hexo generate`,生成静态文件。 7. 部署到 GitHubGitee: - 部署到 GitHub:可以使用 hexo-deployer-git 插件实现自动部署到 GitHub Pages。运行 `npm install hexo-deployer-git --save`,然后配置 `_config.yml` 文件中的 `deploy` 部分,填入你的 GitHub 仓库地址。 - 部署到 Gitee:可以使用 hexo-deployer-git 插件实现自动部署到 Gitee Pages。运行 `npm install hexo-deployer-git --save`,然后配置 `_config.yml` 文件中的 `deploy` 部分,填入你的 Gitee 仓库地址。 8. 部署博客:运行 `hexo deploy`,将生成的静态文件部署到 GitHubGitee。 完成上述步骤后,你的 Hexo 博客就会被部署到 GitHubGitee 上了。你可以通过访问相应的仓库网址来查看你的博客。记得在以后更新博客内容时,使用 `hexo generate` 重新生成静态文件,并运行 `hexo deploy` 将更新部署到仓库中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值