Vue cli3 库模式搭建组件库并发布到 npm的流程

下面是Vue cli3 库模式搭建组件库并发布到 npm的完整流程攻略。

1. 准备工作

1.1. 创建项目

首先,我们需要在本地创建一个 Vue 项目,可以通过 Vue CLI 3.x 提供的命令行工具来创建:

vue create my-component-library

其中,my-component-library 为你的项目名称。

1.2. 配置项目

接着,我们需要对项目进行一些配置。在项目根目录下创建 vue.config.js 文件,并添加以下内容:

const path = require('path')

module.exports = {
  // 配置打包时不生成.map文件
  productionSourceMap: false,

  // 配置打包时输出的文件夹名称
  outputDir: 'dist',

  // 配置Webpack的内部细节
  configureWebpack: {
    // 配置入口文件
    entry: './src/index.js',

    // 输出模块时的名称
    output: {
      libraryExport: 'default',
      library: 'my-component-library',
      filename: 'my-component-library.js',
      path: path.resolve(__dirname, 'dist'),
      umdNamedDefine: true,
      libraryTarget: 'umd'
    },

    // 配置使用的插件
    plugins: []
  }
}

其中,我们通过 libraryExport 设置让打包后的文件只有一个导出,默认为 export default,并设置 library 为我们组件库的名称。

1.3. 编写组件

接着,我们需要创建组件目录和文件。在 src 目录下创建 components 目录,并在其中创建相应的组件文件。

示例:创建一个 Button.vue 组件,代码如下:

<template>
  <button class="btn">
    <slot></slot>
  </button>
</template>

<script>
export default {
  name: 'Button'
}
</script>

<style>
.btn {
  padding: 10px 20px;
  border-radius: 4px;
  color: #fff;
  background-color: #007bff;
  border: none;
  cursor: pointer;
}
</style>

1.4. 编写入口文件

接下来,我们需要编写入口文件来导出所有的组件。在 src 目录下创建 index.js 文件,代码如下:

// 导入组件
import Button from './components/Button.vue'

// 存储组件列表
const components = [Button]

// 定义install方法,接收Vue作为参数
const install = function(Vue) {
  // 判断是否安装
  if (install.installed) return
  // 遍历注册全局组件
  components.map(component => Vue.component(component.name, component))
}

// 判断是否直接引入文件
if (typeof window !== 'undefined' && window.Vue) {
  install(window.Vue)
}

export default {
  // 导出的对象必须具备一个install方法
  install,
  // 所有组件,必须具备install,才能使用Vue.use()
  ...components
}

2. 发布到 NPM

接下来,我们需要将我们的组件库发布到 NPM 上,供大家使用。

2.1. 注册 NPM 账号

首先,我们需要在 NPM 官网上注册一个账号,并且在本地登录该账号。可以通过 npm login 命令进行登录。

2.2. 配置 package.json

接着,我们需要在 package.json 文件中添加一些信息,比如 name, version, description, author, keywords 等。

示例:

{
  "name": "my-component-library",
  "version": "1.0.0",
  "description": "A Vue.js component library",
  "main": "dist/my-component-library.js",
  "author": "<Your Name>",
  "license": "MIT",
  "keywords": ["vue", "component", "library"],
  "repository": {
    "type": "git",
    "url": "<Git Repository URL>"
  },
  ...
}

2.3. 打包发布

最后,我们需要打包组件库,生成压缩包,并且使用 npm publish 命令发布到 NPM 上。

打包命令:

npm run build

发布命令:

npm publish --access public

至此,我们的组件库已经成功发布到 NPM 上,可以供其他人使用了。

示例

上面的步骤可以有多种不同的具体实现方式,这里举2个例子:

示例1:添加单元测试

在本地项目中安装 jest@vue/test-utils

npm i -D jest @vue/test-utils

并在 package.json 中添加以下配置:

{
  "scripts": {
    "test": "jest"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "vue"
    ],
    "transform": {
      "^.+\\.js$": "babel-jest",
      ".*\\.(vue)$": "vue-jest"
    },
    "collectCoverage": true,
    "collectCoverageFrom": [
      "**/*.{js,vue}",
      "!**/node_modules/**"
    ],
    "coverageReporters": [
      "html",
      "text"
    ]
  }
}

并在 tests 目录下创建测试文件 Button.spec.js

import { mount } from '@vue/test-utils'
import Button from '../src/components/Button.vue'

describe('Button.vue', () => {
  it('renders props.text when passed', () => {
    const text = 'Click me'
    const wrapper = mount(Button, {
      propsData: { text }
    })
    expect(wrapper.text()).toMatch(text)
  })
})

这样,我们就可以在本地运行 npm test 命令进行单元测试。

示例2:添加文档站点

在本地项目中安装 vuepress@vuepress/plugin-active-header-links

npm i -D vuepress @vuepress/plugin-active-header-links

并在项目根目录下创建 docs 目录,并在其中创建 .vuepress 目录和 config.js 文件,然后在 config.js 文件中添加以下内容:

module.exports = {
  title: 'My Component Library',
  description: 'A Vue.js component library',
  base: '/my-component-library/',
  plugins: [
    '@vuepress/active-header-links'
  ],
  themeConfig: {
    sidebar: [
      {
        title: 'Introduction',
        collapsable: false,
        children: [
          '/'
        ]
      },
      {
        title: 'Components',
        collapsable: false,
        children: [
          '/components/button'
        ]
      }
    ]
  }
}

接着,在 docs/components 目录下创建 button.md 文件:

# Button

A simple button component.

## Usage

```vue
<template>
  <Button>Click me</Button>
</template>

<script>
import { Button } from 'my-component-library'

export default {
  components: { Button }
}
</script>

```

这样,我们就可以使用 vuepress dev 命令启动本地服务器进行文档预览,使用 vuepress build 命令进行文档打包。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue cli3 库模式搭建组件库并发布到 npm的流程 - Python技术站

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

相关文章

  • vue项目中使用pinyin转换插件方式

    以下是使用pinyin转换插件在vue项目中的详细步骤: 步骤1:安装pinyin转换插件 在vue项目的命令行终端,使用npm或yarn等包管理工具安装pinyin插件,命令如下: npm install pinyin –save 或 yarn add pinyin 步骤2:在vue组件中引入pinyin插件及相关依赖 在需要使用pinyin转换的vue…

    Vue 2023年5月28日
    00
  • vue传值方式的十二种方法总结

    我来为你讲解一下“Vue传值方式的十二种方法总结”的完整攻略。 一、前言 在开发Vue的过程中,我们经常需要进行组件之间的数据传递。这时候,就需要选择一种合适的传值方式。本篇文章将为大家总结了十二种常见的Vue传值方式,并对它们进行详细的介绍和对比。希望对大家在开发中提供一些帮助。 二、直接传值 最简单的方式就是直接传值。也就是说,我们可以在父组件中直接将数…

    Vue 2023年5月27日
    00
  • 如何利用Vue3+Vite批量导入模块/资源

    以下是如何利用Vue3+Vite批量导入模块/资源的完整攻略: 1. 在Vite中使用批量导入 Vite是一个快速的构建工具,它通过利用现代浏览器的原生 ES 模块特性来实现快速的热重载和打包速度。Vite配合Vue3可以使用批量导入来加载模块/资源。以下是两个示例: 示例1:导入所有同一目录下的文件 在Vue3中,可以使用以下代码导入某个目录下的所有文件:…

    Vue 2023年5月28日
    00
  • vue diff算法全解析

    Vue Diff算法全解析 什么是diff算法 Diff算法是指计算两个版本之间差异的一种算法,常用于前端框架的虚拟DOM渲染优化中。在Vue中,Diff算法被应用于虚拟DOM的更新过程中,用于计算当前虚拟DOM与上一次渲染的虚拟DOM之间的差异,然后最小化DOM操作,从而提升性能。 diff算法的原理 (此部分内容较为抽象,建议读者阅读完整分析之后自行体验…

    Vue 2023年5月29日
    00
  • 解决vue中对象属性改变视图不更新的问题

    当我们在Vue组件中把一个对象作为一个属性传递给子组件,如果我们修改了对象中的属性的值,那么Vue默认是不会触发视图更新的,这是因为Vue在比较对象时是通过引用地址比较的,而不是对象内部属性的值比较。这就导致了当对象中属性值改变后,我们需要手动通知Vue去更新视图的问题。 下面是解决vue中对象属性改变视图不更新的步骤: 方案一:使用vm.$set()方法更…

    Vue 2023年5月28日
    00
  • Vite打包优化之缩小打包体积实现详解

    下面就来详细讲解Vite打包优化之缩小打包体积实现的攻略。 什么是Vite? Vite是一种快速的前端构建工具,它可以使用原生ES模块作为项目源代码,通过原生ES模块的特性进行高效构建和打包。 为什么需要优化打包体积? 打包体积是指将项目中的所有代码、资源文件等打包为最终的生产环境运行时文件的大小。打包体积过大会导致项目启动缓慢、网页加载缓慢等问题,而优化打…

    Vue 2023年5月29日
    00
  • Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析

    Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析 Bootstrap时间选择器(datetimepicker)和日期范围选择器(daterangepicker)是基于Bootstrap框架的时间和日期选择器插件,能够让用户轻松快速地选择时间和日期。在本文中,我们将详细讲解如何使用datetimepicker…

    Vue 2023年5月28日
    00
  • vue 使用print-js 打印渲染不出来问题

    下面是详细的攻略说明: 问题描述 Vue 使用 print-js 打印时,有时候会存在打印内容渲染不出来的问题。这种情况通常出现在需要打印的内容比较复杂,包含了 Vue 组件、异步请求等复杂元素。 解决方法 方法一:将需要打印的内容先进行渲染 需要将需要打印的内容先使用 Vue 的 $mount 方法进行渲染,然后将渲染后的 DOM 节点作为参数传递给 pr…

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