Vue封装组件并发布到npm仓库(无第三方依赖)

9 篇文章 0 订阅
5 篇文章 0 订阅

前言

使用Vue框架进行开发,组件封装是一个很常规的操作。一个封装好的组件可以在项目的任意地方使用,甚至我们可以直接从npm仓库下载别人封装好的组件来进行使用,比如iview、element-ui这一类的组件库。但是每个公司的需求是不一样的,我们可以封装自己的组件库并发布到npm上去,这样可以不用碰到相似的项目就复制一大串代码了,简洁明了,要用的时候可以直接从npm安装使用。

1. 环境准备

封装的是Vue组件,所以我们直接在Vue脚手架项目里面进行封装即可

(1)初始化Vue项目

vue create my-app

(2)运行项目

npm run serve

 1b1e20b2133347b3a05d880a8741d3c8.png

 

2. 组件封装

2.1 新建package文件夹

因为我们可能会封装多个组件,所以在src下面新建一个package文件夹用来存放所有需要上传的组件。

ab0ed31d2ea34dc48c270b3b290deebb.png

 2.2 编写组件代码

以chu-header组件为例,代码如下:


<template>
    <div :class="['base-card', cardType === 'sub' ? 'sub' : 'main']" :style="{ width, height }">
      <div class="card-top" :style="{'background-image':'url('+bgPic+')','background-repeat':'no-repeat'}">
        <slot name="top-control"><span class="title">{{ title }}</span></slot>
      </div>
      <div class="content">
        <slot>内容</slot>
      </div>
    </div>
  </template>
  <script>
  export default {
    name: "chu-header",
    props: {
      width: {
        type: String,
        default: "510px",
      },
      bgPic:{
        type: String,
      },
      height: {
        type: String,
      },
      title: {
        type: String,
        default: "标题",
      },
      cardType: {
        type: String,
        default: "main",
        validator: function (value) {
          // 这个值必须匹配下列字符串中的一个
          return ["main", "sub"].includes(value);
        },
      },
    },
  }
  </script>
  <style lang='scss' scoped>
  .base-card {
    &.main {
      &>.card-top {
        height: 48px;
        line-height: 48px;
        // background: var(--bgBackground) no-repeat;
        background-size: 100% 100%;
        text-align: center;
        .title {
          font-family: PangMenZhengDao;
          font-size: 24px;
          letter-spacing: 1px;
          display: inline-block;
          padding-left: 16px;
        }
      }
      &>.content {
        height: calc(100% - 48px);
        background: rgba(2,16,34,0.8);
        box-shadow: 0px 2px 10px 0px rgba(14,27,46,0.67);
        border: 1px solid rgba(255,255,255,0.1);
        margin: 0 6px;
      }
    }
    &.sub {
      &>.card-top {
        height: 38px;
        line-height: 38px;
        // background: var(--bgBackground) no-repeat;
        background-size: 100% 100%;
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding-left: 16px;
        .title {
          font-family: PingFangSC-Semibold, PingFang SC;
          font-size: 16px;
          display: inline-block;
        }
        
      }
      &>.content {
        height: calc(100% - 38px);
        padding: 10px;
      }
    }
  }
  </style>

然后我们引用到App.vue组件里面验证一下,看是否组件可用,代码如下: 

<template>
  <div id="app">
     <chu-header :bgPic="bgpic"></chu-header>
  </div>
</template>
<script>
import ChuHeader from './package/chu-header'
export default {
  name: 'App',
  components: {
    ChuHeader
  },
  data(){
     return{
        bgpic:require('@/assets/imgs/main-title-bg.png')
     }
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

最终效果显示如下:

8431018454d54a51b6d21a323cae4b1c.png 

2.3 使用Vue插件模式 

这一步是封装组件中的重点,用到了Vue提供的一个公开方法:install。这个方法会在你使用Vue.use(plugin)时被调用,这样使得我们的插件注册到了全局,在子组件的任何地方都可以使用。

在package目录下新建index.js文件,代码如下:

import ChuHeader from '../package/chu-header/index.vue'//引入封装好的组件
const coms=[ChuHeader]//将来如果有其他组件,都可以写到这个数组里去
//批量组件注册
const install =function(Vue){
     coms.forEach((com)=>{
        Vue.component(com.name,com)
     })
}
export default install//这个方法以后再使用的时候可以被use调用

上传代码主要的的一项工作就是将我们封装好的组件注册为全局组件,用到了Vue.component()方法,当使用Vue.use()时,我们的install方法便会执行。

3. 组件打包 

到这里为止,我们的组件封建基本就完成了,当然组件封装成什么样得看自己得业务需求了,接下来我们就需要将组件进行打包了。

修改我们项目得package.json文件,配置打包命令:

"package": "vue-cli-service build --target lib ./src/package/index.js --name pig-ui --dest pig-ui"

5cc210ace1284022bc961f4859944718.png 

打包命令解释:

  • --target lib 关键字 指定打包的目录
  • --name 打包后的文件名字
  • --dest 打包后的文件夹的名称

然后执行打包命令:

npm run package

打包执行完成后我们项目目录下就会多出一个chuxiuli-ui文件夹,存放的是打包后的文件。 

f71daa585c3741428942c3317bacc130.png

4. 发布到npm 

4.1 初始化package.json

想要发布到npm仓库,我们还得在chuxiuli-ui文件夹下初始化一个package.json文件。进入pig-ui目录,执行命令:

npm init -y

 b3f0633abe354e12841b27749da2f0ad.png

4.2 发布到npm仓库 

(1)注册账号

想要发布到npm仓库,就必须要有一个账号,先去npm官网注册一个账号,注意记住用户名、密码和邮箱,发布的时候可能会用到。

(2)设置npm源

有些小伙伴可能本地的npm镜像源采用的是淘宝镜像源或者其它的,如果想要发布npm包,我们得吧我们得npm源切换为官方得源,命令如下:

npm config set registry=https://registry.npmjs.org

(3)添加npm用户

进入chuxiuli-ui目录,添加npm用户,执行命令:

npm adduser

这里会让你填写用户名等等,如果之前设置过即可跳过此步。

(4)发布npm

在chuxiuli-ui目录下执行命令: 

npm publish

如果发布失败可能是名字重复了,改了名字即可,发布成功后,我们即可到npm光网上查看自己发布得npm包:

41274067a86743edb58ce8e0202770ec.png 

5. 从npm安装使用 

直接执行安装命令:

npm i chuxiuli-ui

然后在main.js引用注册,代码如下:

import ChuXiuLiUi from 'chuxiuli-ui'
import '../node_modules/chuxiuli-ui/chuxiuli-ui.css'
Vue.use(ChuXiuLiUi)

这里单独引用了css,就和element-ui一样需要单独引入样式文件。

直接使用组件chu-header,代码如下:

91e6a04029b6472ab6bbf4844ecab041.png 

 到这里我们的组件就封装好了,并且可以直接从npm仓库下载使用。

 

 

 

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue是一种用于构建用户界面的渐进式JavaScript框架,它可以通过封装组件来实现可复用、模块化以及易于维护的代码。下面我将介绍如何对Vue组件进行封装,并将其打包发布npm上供他人使用。 首先,我们需要创建一个Vue项目,并在项目中使用Vue CLI来进行组件开发和构建。可以通过以下命令创建一个新的Vue项目: ``` vue create my-component ``` 接下来,您可以通过Vue CLI支持的任何方式(如单文件组件、JavaScript脚本等)创建自定义组件。在组件开发过程中,可以利用Vue提供的各种功能和特性,比如计算属性、生命周期钩子函数、模板语法等。确保你的组件功能完备、可复用且易于理解。 完成组件开发后,我们需要将其打包成可用的npm包。Vue CLI可以帮助我们自动进行打包,只需执行以下命令: ``` npm run build ``` 该命令将生成一个dist文件夹,其中包含了打包后的组件代码。 接下来,我们需要在项目的根目录中创建一个package.json文件,用于描述我们的npm包,并设置一些配置信息。其中,name字段用于定义npm包的名称,version字段用于定义npm包的版本号。其他字段根据您的需要进行设置。然后,执行以下命令将package.json文件拷贝到dist文件夹中: ``` cp package.json dist/ ``` 然后,我们需要登录到npm官方网站,并创建一个账户。接着,使用以下命令进行登录: ``` npm login ``` 在登录成功后,使用以下命令发布npm包: ``` npm publish dist/ ``` 完成上述步骤后,您的自定义Vue组件就已经发布到了npm上。其他开发者可以通过以下命令安装并使用您的组件: ``` npm install your-component ``` 然后,在他们的Vue项目中,可以通过import语句引入您的组件,并在模板中使用它。 至此,我们已经学习了如何封装自定义Vue组件,并通过npm发布,供他人使用。希望这能帮助到您!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值