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中ref的用法及演示

    下面是“Vue中ref的用法及演示”的完整攻略。 一、什么是Vue中的ref ref 是 Vue 提供的一个属性,可以用来给元素或组件注册引用信息。比如,渲染后,我们可以使用$refs来访问这个元素。 二、Vue中ref的用法 1. 绑定ref 我们对组件(或元素)绑定ref属性,Vue将会提供一个组件实例(或元素)的引用,我们在组件内可以使用 this.$…

    Vue 2023年5月28日
    00
  • Vue 项目性能优化方案分享

    下面我将为您详细讲解Vue项目性能优化方案分享的完整攻略。 一、性能优化方案 在Vue项目中,为了提升应用的性能,我们可以采取以下几种优化方案: 1. 优化Webpack打包配置 我们可以对Webpack打包配置进行优化,来提高项目的打包效率。比如使用HappyPack插件来开启多线程打包,使用DllPlugin插件来抽离第三方库等。 2. 首屏加载优化 针…

    Vue 2023年5月27日
    00
  • 从vue源码解析Vue.set()和this.$set()

    从 Vue 源码解析 Vue.set() 和 this.$set() 在 Vue 中,我们使用 Vue.set() 或 this.$set() 来设置响应式对象的新属性或更新已有属性。这个方法的底层实现原理比较复杂,本文将从源码角度解析其底层实现过程。 Vue.set() 和 this.$set() 概述 在 Vue.js 中,我们可以使用 Vue.set(…

    Vue 2023年5月27日
    00
  • 如何修改Vue项目运行的IP和端口

    当我们开发 Vue.js 项目时,默认情况下,项目运行在本地的 IP 地址和端口上。但是有些情况下,我们可能需要修改这些默认设置。下面是详细讲解如何修改 Vue.js 项目运行的 IP 和端口的攻略: 1. 修改 package.json 文件中的 scripts 配置 Vue.js 项目的 package.json 文件中有一项 scripts,其中包含了…

    Vue 2023年5月28日
    00
  • 使用Vue.$set()或者Object.assign()修改对象新增响应式属性的方法

    使用Vue.js时,我们通常会遇到在组件渲染时需要动态新增响应式属性的情况。Vue提供了两种方式使对象属性(非响应式的)能被监听到,即Vue.$set()和Object.assign()。 使用Vue.$set()方法 Vue.$set()方法是Vue.js提供的Vue实例方法,用于响应式地向已有对象添加新的属性,或修改已有属性的值。这个方法的第一个参数是目…

    Vue 2023年5月28日
    00
  • AntV+Vue实现导出图片功能

    AntV 是 Ant Design 团队出品的数据可视化解决方案,而 Vue 是当下广泛使用的前端框架之一。本文将介绍如何在 Vue 项目中使用 AntV 实现导出图片功能。具体实现流程如下: 1. 环境搭建 在 Vue 项目中使用 AntV,需要先安装 @antv/g2 和 @antv/data-set 两个依赖包: npm install @antv/g…

    Vue 2023年5月28日
    00
  • vue $mount 和 el的区别说明

    当我们使用Vue进行开发时,我们可以使用$mount方法手动挂载Vue实例,也可以在Vue实例中使用el属性来自动挂载实例。 首先,让我们来看看这两种方式的区别。 Vue $mount $mount方法可以将Vue实例手动挂载到DOM上。通过调用$mount,Vue实例才能开始渲染。使用$mount方法时需要注意的是,如果在实例化Vue时没有显式地提供el选…

    Vue 2023年5月28日
    00
  • 3分钟迅速学会Vue中methods方法使用技巧

    3分钟迅速学会Vue中methods方法使用技巧 简介 在Vue组件里,methods方法是非常重要的一部分,它是用来存放组件内部方法的地方。在使用Vue的时候,熟练掌握methods的使用技巧,能够提高开发速度和代码可读性。 基本使用方法 在Vue组件中,我们可以定义多个methods方法,类似于下面的例子: <template> <di…

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