使用 Vue cli 3.0 构建自定义组件库的方法

yizhihongxing

使用 Vue cli 3.0 构建自定义组件库的方法可以通过以下步骤实现:

1. 创建一个新的 Vue 项目

使用 Vue cli 3.0 创建一个新项目:

vue create my-library

2. 配置组件库

在 "src" 目录下创建一个 "components" 目录,所有组件都将存放在这个目录中。为了确保组件可以在其他项目中使用,我们需要将这个项目打包成库。

引入库的方法有多种,其中最便于使用的是 Rollup。安装 Rollup:

npm install --save-dev rollup rollup-plugin-babel rollup-plugin-node-resolve rollup-plugin-terser rollup-plugin-vue

在项目根目录下创建一个 "rollup.config.js" 文件并将以下代码添加到文件中:

import vue from 'rollup-plugin-vue'
import babel from 'rollup-plugin-babel'
import { terser } from 'rollup-plugin-terser'
import resolve from 'rollup-plugin-node-resolve'

const path = require('path')

const name = 'MyLibrary' // 你的库的名称

const plugins = [
  resolve({
    extensions: ['.js', '.vue'],
  }),
  vue({
    css: true, // 当该选项为 true 时,Rollup 会将组件的样式和 CSS 提取到单独的 CSS 文件中
    compileTemplate: true, // 当该选项为 true 时,组件模板将被编译
  }),
  babel({
    exclude: 'node_modules/**',
    runtimeHelpers: true,
  }),
  terser(),
]

export default {
  input: 'src/index.js', // 入口文件
  output: [
    {
      file: './dist/my-library.js', // 输出文件路径
      format: 'esm', // 输出格式
      name,
      exports: 'named',
      sourcemap: true,
    },
  ],
  plugins,
}

创建一个 "src/index.js" 入口文件,在这个文件中导入和导出你的所有组件:

import MyComponent from './components/MyComponent.vue'

export {
  MyComponent,
  // 导出其他组件
}

3. 配置打包命令

添加一个打包命令,将我们的组件打包成库并且输出到 "./dist" 目录下:

{
  "scripts": {
    "build": "rollup -c"
  }
}

添加 "main" 和 "module" 字段到 "package.json" 文件中,以配置库的入口:

{
  "main": "dist/my-library.js",
  "module": "dist/my-library.esm.js"
}

4. 在其他项目中使用

在其他项目中,安装你的组件库:

npm install my-library

在项目中使用你的组件:

import { MyComponent } from 'my-library'

到此使用 Vue cli 3.0 构建自定义组件库的步骤就介绍完了。

示例1

以一个具体的组件 Box.vue 为例,其源文件在 "./src/components/Box.vue" 目录下,代码如下:

<template>
  <div class="box">
    <slot>
      <p>我是默认插槽</p>
    </slot>
  </div>
</template>

<script>
export default {}
</script>

<style scoped>
.box {
  width: 200px;
  height: 200px;
  background-color: gray;
}
</style>

此时的目录结构是这样的:

.
├── src
│   ├── components
│   │   └── Box.vue
│   ├── App.vue
│   └── main.js
├── public
│   └── index.html
└── rollup.config.js

执行打包命令:

npm run build

生成目录结构:

.
├── dist
│   └── my-library.esm.js
├── src
│   ├── components
│   │   └── Box.vue
│   ├── App.vue
│   └── main.js
├── public
│   └── index.html
├── rollup.config.js
└── package.json

你会发现生成的 my-library.esm.js 里已经包含了你的组件内容。

示例2

如果你需要在项目外引入一些 Vue 框架,可以通过 Vue.config.js 文件,如下:

// Vue.config.js

module.exports = {
  configureWebpack: {
    resolve: {
      alias: {
        'vue$': 'vue/dist/vue.esm.js' // 'vue/dist/vue.common.js' for webpack 1
      }
    }
  }
}

然后在 rollup.config.js 文件里添加 plugins 到 inputOptions:

import vue from 'rollup-plugin-vue'
import babel from 'rollup-plugin-babel'
import { terser } from 'rollup-plugin-terser'
import resolve from 'rollup-plugin-node-resolve'

const path = require('path')

const name = 'MyLibrary' // 你的库的名称

const plugins = [
  resolve({
    extensions: ['.js', '.vue'],
  }),
  vue({
    css: true, // 当该选项为 true 时,Rollup 会将组件的样式和 CSS 提取到单独的 CSS 文件中
    compileTemplate: true, // 当该选项为 true 时,组件模板将被编译
  }),
  babel({
    exclude: 'node_modules/**',
    runtimeHelpers: true,
  }),
  terser(),
]

const inputOptions = {
  input: 'src/index.js', // 入口文件
  plugins,
  external: ['vue'],//添加 external 选项
  output: [
    {
      file: './dist/my-library.js', // 输出文件路径
      format: 'umd', // 输出格式,目标是使用 CDN 引入,使用 UMD 格式是比较合适的
      name,
      exports: 'named',
      sourcemap: true,
      globals: {
        vue: 'Vue' // 加入自己的 library 使用的依赖
      }
    },
  ],
}

export default inputOptions;

到此,你已经可以愉快地在任意项目中使用你自己的组件库了!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用 Vue cli 3.0 构建自定义组件库的方法 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 深入理解Vue的插件机制与install详细

    深入理解 Vue 的插件机制与 install 详解 Vue.js 是一款高效、灵活的前端开发框架,它的插件机制能够帮助我们非常方便地将第三方库集成进 Vue 项目中,无需手动编写各种组件或指令等。 在这篇文章中,我们将深入理解 Vue 的插件机制,学习如何使用 Vue 的 install 方法扩展 Vue.js 的功能。 插件机制 Vue.js 的插件机制…

    Vue 2023年5月28日
    00
  • 简单谈谈Vue 模板各类数据绑定

    下面我就来详细讲解“简单谈谈Vue 模板各类数据绑定”的完整攻略。 什么是Vue模板数据绑定 Vue.js是一个用于构建用户界面的渐进式JavaScript框架,可以轻松地实现数据与模板的双向绑定,让数据的变化自动更新到视图中,从而简化了前端开发的流程。其中,模板数据绑定就是Vue.js最为重要而且基本的特性之一。 模板数据绑定主要有以下几种方式: 1.插值…

    Vue 2023年5月27日
    00
  • 22个Vue优化技巧(项目实用)

    下面是对“22个Vue优化技巧(项目实用)”的详细讲解。 一、懒加载路由 描述 使用懒加载路由可以大大提升项目的性能,当路由被访问时才会加载对应的组件,如果不使用懒加载路由,那么全局的所有组件会在项目启动时被加载,浪费大量资源。 示例 在路由文件中使用import语句,将组件打包成一个chunk,当路由被匹配时才会加载: const Foo = () =&g…

    Vue 2023年5月27日
    00
  • vue跳转同一路由报错的问题及解决

    下面是关于“vue跳转同一路由报错的问题及解决”的完整攻略。 一、问题现象 在Vue开发中,经常会遇到多个块之间跳转的场景。当你在路由表中定义好相应的路由,并且跳转到相同路由时,可能会出现以下两种报错信息: 如果是使用router.push进行路由跳转,报错信息如下: Uncaught (in promise) NavigationDuplicated: A…

    Vue 2023年5月28日
    00
  • 用vscode开发vue应用的方法步骤

    下面我来详细讲解使用vscode开发vue应用的方法步骤。 前置条件 在开始使用vscode开发vue应用前,需要安装node.js和vue-cli工具。安装完成后,在终端执行以下命令可以查看版本信息,确认安装成功。 node -v vue -V 步骤一:创建项目 使用vue-cli创建项目的命令如下: vue create my-app 其中,my-app…

    Vue 2023年5月27日
    00
  • Vue项目中使用setTimeout存在的潜在问题及解决

    在Vue项目中使用setTimeout存在一个潜在的问题:在Vue组件销毁之前,setTimeout的回调函数可能还会被触发,这样就可能导致潜在的内存泄漏或出现意想不到的行为。本文将为您提供解决这一问题的完整攻略,并通过两个实例进行详细说明。 问题描述 在Vue组件中,我们可能会使用定时器来执行一些异步操作,例如延时关闭提示框。然而,定时器在Vue组件销毁时…

    Vue 2023年5月29日
    00
  • javascript 进阶篇3 Ajax 、JSON、 Prototype介绍

    JavaScript 进阶篇3:Ajax、JSON、Prototype介绍 本文将向你介绍 JavaScript 中常用的 Ajax、JSON、Prototype 相关概念以及用法。 Ajax Ajax 是 Asynchronous JavaScript and XML 的简写,意为“异步 JavaScript 和 XML”。它是一种用于创建快速动态网页的技…

    Vue 2023年5月28日
    00
  • vue组件暴露和.js文件暴露接口操作

    Vue组件暴露 在 Vue 的开发过程中,封装组件是必不可少的一项技能。将组件封装后,我们通常需要将组件暴露出来,使得其他地方可以引用使用。下面是Vue组件暴露的完整攻略: 1. 全局组件 在Vue中,我们可以使用Vue.component()方法来注册全局组件。这样注册后,整个应用的任何组件都可以使用这个组件。 // 定义全局组件 Vue.componen…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部