从0搭建Vue3组件库如何使用 glup 打包组件库并实现按需加载

yizhihongxing

下面是从0搭建Vue3组件库并使用glup打包组件库实现按需加载的完整攻略。

步骤一:搭建组件库的开发环境

1.1 环境依赖

首先,我们需要安装Node.js和npm。在安装完成之后,可以在命令行中输入以下命令进行确认:

node -v # 查看当前Node.js版本
npm -v # 查看当前npm版本

1.2 创建Vue3组件库

Vue3框架已经正式发布,我们可以使用Vue CLI创建组件库的模板。

npm install -g @vue/cli
vue create my-component-library --inline --no-git

其中,my-component-library是你组件库的名称,--inline是指定创建一个内联的模板,而--no-git是指定创建时不添加Git版本管理。创建完毕后,进入该目录并启动开发服务器来进行开发。

cd my-component-library
npm run serve

然后打开管理器,输入localhost:8080即可以看到Vue3应用程序已经成功启动。

1.3 安装Vite

由于Vite是一种新的开发方式,使用Vite也可以搭建Vue3组件库的开发环境。我们先通过npm全局安装Vite:

npm install -g vite

然后进入项目目录下,初始化一个Vue3组件库:

npm init vite-app my-component-library

接着安装相关依赖:

cd my-component-library
npm install

最后启动开发服务器:

npm run dev

打开管理器,输入localhost:3000即可以看到Vue3应用程序已经成功启动。

步骤二:创建组件

为了方便演示,这里我们创建一个简单的Button组件。

2.1 组件结构

首先在src/components目录下新建Button.vue文件,然后在内部写下如下的代码即可。

<template>
  <button class="btn" :class="[type ? 'btn-' + type : '', size ? 'btn-' + size : '']">
    <slot></slot>
  </button>
</template>

<script>
export default {
  props: {
    type: {
      type: String,
      default: ''
    },
    size: {
      type: String,
      default: ''
    }
  }
}
</script>

<style scoped>
.btn {
  border-radius: 3px;
  border: none;
  color: #fff;
  cursor: pointer;
  height: 32px;
  padding: 0 20px;
  transition: all .3s cubic-bezier(.645,.045,.355,1);
}
.btn-primary {
  background-color: #f46d3c;
}
.btn-secondary {
  background-color: #aab8c2;
}
.btn-small {
  height: 24px;
  padding: 0 10px;
}
</style>

2.2 引入组件

接下来,在src下新建index.js,并将组件导出。

export { default as Button } from './components/Button.vue'

步骤三:打包组件库

接下来就是使用gulp将组件库进行打包,并实现按需加载的功能。

3.1 安装依赖

npm install --save-dev gulp gulp-uglify gulp-babel @babel/preset-env rollup gulp-rollup rollup-plugin-node-resolve rollup-plugin-vue

其中:

  • gulp 和其它常用插件
  • rollup 和它的一些常用插件。我们将使用它来打包库。
  • @babel/preset-env 和 gulp-babel,用于在库中使用的所有JavaScript文件中转换ES6标准代码,以便可以在旧版浏览器上使用。
  • rollup-plugin-vue,使用rollup打包Vue单个文件组件如 .vue

3.2 配置gulpfile.js

在根目录下新建gulpfile.js文件。这里我们借助gulp,使用rollup去打包。

var gulp = require('gulp');
var vue2Rollup = require('rollup-plugin-vue');
var rollup = require('gulp-better-rollup');
var nodeResolve = require('rollup-plugin-node-resolve');
var uglify = require('gulp-uglify');
var babel = require('gulp-babel');

gulp.task('default', function() {
  return gulp.src('src/index.js')
    .pipe(rollup({
      plugins: [
        vue2Rollup({}),
        nodeResolve(),
      ]
    }, {
      format: 'umd',
      name: 'my-component-library'
    }))
    .pipe(babel({
      presets: ['@babel/preset-env']
    }))
    .pipe(uglify())
    .pipe(gulp.dest('dist/'))
});

这里我们使用gulp默认任务,将src/app.js进行打包并输出到dist目录下。

3.3 编译库

在命令行中输入以下命令:

gulp

运行完毕后,可以在dist目录下看到编译后的代码。

步骤四:使用编译出来的组件库

4.1 安装和使用全局的组件库

首先安装组件库:

npm install --save your-component-library

然后在项目中引入:

import Vue from 'vue';
import YourComponentLibrary from 'your-component-library/dist/your-component-library.js';
import 'your-component-library/dist/your-component-library.css';

Vue.use(YourComponentLibrary);

4.2 按需加载组件

为了防止打包后的组件库体积过于庞大,我们可以使用按需加载的方式来引入组件。

import Vue from 'vue';
import { Button } from 'your-component-library/dist/your-component-library.esm.js';

Vue.component('MyButton', Button);

这样的话就只会加载Button组件了。

示例一:基于Vue CLI创建组件库

1. 创建组件

在前面提到的my-component-library项目中的components目录下新建一个HelloWorld.vue组件。

<template>
  <div>
    <h1>{{ msg }}</h1>
    <button class="btn" @click="changeMsg">点我改变文字</button>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: {
      type: String,
      default: 'Hello, Vue 3!'
    }
  },
  methods: {
    changeMsg() {
      this.$emit('update:msg', 'Hello, World!');
    }
  }
};
</script>

<style scoped>
.btn {
  display: inline-block;
  padding: 10px;
  border-radius: 3px;
  border: none;
  color: #fff;
  background-color: #42b983;
  cursor: pointer;
}
</style>

2. 导出组件

在src下新建index.js,在其中导出组件。

import HelloWorld from './components/HelloWorld.vue';

export default {
  install(Vue) {
    Vue.component('HelloWorld', HelloWorld);
  }
};

3. 使用gulp打包组件库

在gulpfile.js中配置以下代码。

const gulp = require('gulp');
const vue2Rollup = require('rollup-plugin-vue');
const rollup = require('gulp-better-rollup');
const nodeResolve = require('rollup-plugin-node-resolve');
const uglify = require('gulp-uglify');
const babel = require('gulp-babel');

gulp.task('default', function() {
  return gulp.src('src/index.js')
    .pipe(rollup({
      plugins: [
        vue2Rollup({}),
        nodeResolve(),
      ]
    }, {
      format: 'umd',
      name: 'my-component-library'
    }))
    .pipe(babel({
      presets: ['@babel/preset-env']
    }))
    .pipe(uglify())
    .pipe(gulp.dest('dist/'))
});

然后在终端中运行以下命令进行打包:

gulp

4. 安装及使用组件库

在组件库的根目录下,打开终端,执行以下命令:

npm pack

然后将生成的tarball文件拷贝到其他项目文件夹下,执行以下命令进行安装:

npm install your-component-library-1.0.0.tgz

安装完成后,在项目中引入:

import Vue from 'vue';
import YourComponentLibrary from 'your-component-library';
import 'your-component-library/dist/your-component-library.css';

Vue.use(YourComponentLibrary);

5. 按需加载组件

在Vue CLI创建的组件库中不支持按需加载组件。因此我们需要将其改为Vue CLI提供的构建方式来实现按需加载。

首先我们需要修改package.jsonmainmodule字段,将它们变为:

{
  "main": "dist/your-component-library.common.js",
  "module": "dist/your-component-library.esm.js"
}

然后在组件库的的src文件夹下新增一个文件夹plugin,并在其中创建index.js,写入以下代码:

import HelloWorld from '../components/HelloWorld.vue';

const components = [
  HelloWorld
];

export default {
  install(Vue) {
    components.forEach((component) => {
      Vue.component(component.name, component);
    });
  }
};

接着修改src/components/index.js中的代码,将其变为:

export { default as HelloWorld } from './HelloWorld.vue';

src/main.js中添加以下代码:

import YourComponentLibrary from './plugin';
import { HelloWorld } from './components';

Vue.use(YourComponentLibrary);

const components = [HelloWorld];

components.forEach((component) => {
  Vue.component(component.name, component);
});

最后在顶级App.vue文件中添加以下代码来使用组件:

<template>
  <div id="app">
    <h1>{{ msg }}</h1>
    <my-hello-world :msg="msg" @update:msg="changeMsg" />
  </div>
</template>

<script>
import { HelloWorld } from 'your-component-library';

export default {
  name: 'App',
  components: {
    MyHelloWorld: HelloWorld
  },
  data() {
    return {
      msg: 'Hello, Vue 3!'
    };
  },
  methods: {
    changeMsg(newMsg) {
      this.msg = newMsg;
    }
  }
};
</script>

示例二:基于Vite创建组件库

1. 创建组件

与上述Vue CLI创建组件库的做法相同,在src/components目录下新建HelloWorld.vue文件。

<template>
  <h1>{{ msg }}</h1>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: {
      type: String,
      default: 'Hello, Vite!'
    }
  },
  data() {
    return {};
  },
  methods: {},
  computed: {}
};
</script>

2. 导出组件

在src下新建index.js,在其中导出组件。

import HelloWorld from './components/HelloWorld.vue';

export {
  HelloWorld
};

3. 使用gulp打包组件库

在gulpfile.js中配置以下代码。

const gulp = require('gulp');
const vue2Rollup = require('rollup-plugin-vue');
const rollup = require('gulp-better-rollup');
const nodeResolve = require('rollup-plugin-node-resolve');
const uglify = require('gulp-uglify');
const babel = require('gulp-babel');

gulp.task('default', function() {
  return gulp.src('src/index.js')
    .pipe(rollup({
      plugins: [
        vue2Rollup({}),
        nodeResolve(),
      ]
    }, {
      format: 'es',
    }))
    .pipe(babel({
      presets: ['@babel/preset-env']
    }))
    .pipe(uglify())
    .pipe(gulp.dest('dist/'))
});

然后在终端中运行以下命令进行打包:

gulp

4. 安装及使用组件库

在组件库的根目录下执行以下命令进行安装:

npm link

然后在需要使用的项目中执行以下命令(使用link的方式将组件库link到此项目中):

npm link your-component-library

安装完毕后,在项目中引入:

import { HelloWorld } from 'your-component-library/dist/your-component-library.esm.js';
import 'your-component-library/dist/your-component-library.css';

export default {
  name: 'App',
  components: {
    HelloWorld
  }
};

5. 按需加载组件

在Vite创建的组件库中,组件库模板默认就支持按需加载组件。我们只需要在项目中的代码中进行按需引入即可。

import { HelloWorld } from 'your-component-library';

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从0搭建Vue3组件库如何使用 glup 打包组件库并实现按需加载 - Python技术站

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

相关文章

  • 一文教会你搭建vite项目并配置路由和element-plus

    下面是详细攻略。 搭建vite项目 全局安装vite: npm install -g vite 创建一个项目目录,进入项目目录,初始化package.json文件: mkdir my-vite-project cd my-vite-project npm init -y 安装依赖: npm install vite vue vue-router 在项目目录下…

    Vue 2023年5月28日
    00
  • Vue中的过滤器(filter)详解

    Vue中的过滤器(Filter)详解 什么是过滤器(Filter)? 过滤器(Filter)是Vue.js提供的一种可复用功能的方法,用于对数据的格式化处理。 在Vue.js的模板语法中, 可以用管道符(|)来应用过滤器。管道符前面是要过滤的数据项,管道符后面是过滤器的名称。 例如: <div>{{message | capitalize}}&l…

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

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

    Vue 2023年5月27日
    00
  • 详解使用vuex进行菜单管理

    对于“详解使用Vuex进行菜单管理”的完整攻略,以下是步骤和示例说明: 1. 确定Vuex的状态管理 在使用Vuex进行菜单管理之前,需要确定有哪些状态需要在Vuex中进行管理。在本教程中,我们需要管理的状态有: 菜单数据:用于渲染整个菜单。 当前菜单项:用于存储当前选择的菜单项,以便在页面中高亮显示。 打开的菜单项:用于存储当前展开的菜单项。 你可以在Vu…

    Vue 2023年5月27日
    00
  • vue打印插件vue-print-nb的实现代码

    下面详细讲解一下vue打印插件vue-print-nb的实现代码的攻略。 1. 确认安装 首先需要确认已经在vue项目中安装了vue-print-nb插件,确认方法可通过以下命令进行: npm list vue-print-nb 如果已经正确安装,则可查看到vue-print-nb以及其依赖项在项目文件夹中的位置。 2. 使用vue-print-nb插件 接…

    Vue 2023年5月27日
    00
  • 动态Axios的配置步骤详解

    动态Axios是一个常用的网络请求库,其通过封装浏览器内置对象XMLHttpRequest实现的。在使用Axios时,我们需要对其进行配置,以满足特定的请求需求,本文将对Axios的配置进行详细讲解。 配置步骤 安装Axios 在使用Axios之前,需要先安装该库,可以通过以下命令进行安装: npm install axios 导入Axios 在进行Axio…

    Vue 2023年5月27日
    00
  • Vue+webpack项目配置便于维护的目录结构教程详解

    下面我将详细讲解“Vue+webpack项目配置便于维护的目录结构教程详解”的完整攻略。 1. 开始前的准备 首先需要确保已经正确安装了Node.js和Vue-cli,并且创建了一个基于Vue-cli的项目。 2. 目录结构设计 在Vue-cli创建的项目中,已经自带了一些目录和文件,如下所示: . ├── README.md ├── babel.confi…

    Vue 2023年5月28日
    00
  • Vue组件模板的几种书写形式(3种)

    当使用Vue.js构建应用程序时,组件是不可或缺的部分。Vue组件模板是描述组件外观的一种结构,它可以通过多种方式进行书写。本文将介绍Vue组件模板的三种常见书写形式。 1. 渲染函数形式 在Vue中,我们可以使用渲染函数来动态生成组件模板,而不是将模板作为字符串传递。渲染函数形式使用JavaScript来构建组件模板,具有更高的灵活性和可复用性。下面是一个…

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