首页 > 其他分享 >vue封装组件并发布到Npm

vue封装组件并发布到Npm

时间:2023-06-07 17:58:10浏览次数:45  
标签:Npm npm vue 封装 package TestButton ui 组件

前言
vue 封装组件是一个很常规的操作。一个封装好的组件可以在项目的任意地方使用,甚至我们可以直接从npm仓库下载别人封装好的组件使用,入element-ui这一类的组件库。

1、环境准备

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

1)、初始化项目

vue create my-app

(2)、运行项目

npm run serve

2、组件封装

2.1 新建package文件夹

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

 这里我打算封装连个组件:TestButton,TestInput两个vue文件

2.2 编写组件代码

这里就以TestButton为例任意编写一些代码

<template>
  <div>
    <img
      :src="require('../assets/logo.png')"
      alt="Vue logo"
    />
    <br>
    <button class="my-btn">打包测试</button>
  </div>
</template>

<script>
export default {
  name: 'TestButton', // 组件名称
  data() {
    return {}
  },
}
</script>

<style scoped>
.my-btn {
  color: red;
}
</style>

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

<template>
  <div id="app">
    <TestButton/>
    <TestInput/>
  </div>
</template>

<script>
import TestButton from './package/TestButton'
import TestInput from './package/TestInput'

export default {
  name: 'App',
  components: {
    TestButton,
    TestInput
  },
}
</script>

最终效果如下:

 

2.3 使用Vue插件模式

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

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

import TestButton from './TestButton' // 引入封装好的组件
import TestInput from './TestInput'

const coms = [TestButton,TestInput]; // 将来如果有其它组件,都可以写到这个数组里
export default {
  install(Vue) { 
    coms.forEach((com) => { 
      Vue.component(com.name,com)
    })
  }
}

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

 3、组件打包

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

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

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

打包命令解释:

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

然后执行打包命令:

npm run package

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

 

 4、初始化test-ui目录的 package.json

初始化package.json知道test-ui的入口文件,进入test-ui目录,执行命令:

npm init -y

由于这里我们只是测试,所以我不需要更改package.json文件,如果是生产的话,最好加上版本描述和版本号等等,其中name字段便是我们上传到npm仓库后的名称。

 5、发布到npm

(1)注册账号

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

(2)设置npm源

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

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

(3)添加npm用户

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

npm adduser

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

(4)发布npm

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

npm publish

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

5、从npm 安装使用

直接执行安装命令:

npm install test-ui

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

import TestUi from '../test-ui' // 没有测试发布流程,所以采用的本地引入
import '../test-ui/test-ui.css'
  Vue.use(TestUi)

修改App.vue文件,直接使用组件TESTButton,代码如下:

<template>
  <div id="app">
    <TestButton/>
    <TestInput/>
  </div>
</template>

<script>
// import TestButton from './package/TestButton'
// import TestInput from './package/TestInput'

export default {
  name: 'App',
  components: {
    // TestButton,
    // TestInput
  },
}
</script>

展示如下:

 

 

发现图片并没有成功引入,解决办法参考npm 发布包时,图片路径错误解决方案

以上就是vue封装组件并发布到npm的全流程。

参考文章:Vue封装组件并发布到npm仓库

 

标签:Npm,npm,vue,封装,package,TestButton,ui,组件
From: https://www.cnblogs.com/hyt09/p/17464112.html

相关文章

  • vue 预览word文档、图片、pdf文件等
    <el-buttonsize="mini"type="text"icon="el-icon-edit"@click="handlePreviewFile(obj)">预览</el-button><el-dialogtitle="预览":visible.sync="......
  • JS 封装并格式化时间
    建议一个时间格式化的JS文件,复制以下代码进去//日期格式化exportfunctionparseTime(time,pattern){if(arguments.length===0||!time){returnnull}constformat=pattern||'{y}-{m}-{d}{h}:{i}:{s}'letdateif(typeoftime......
  • 异步调用方法并弹出处理中窗体(转载)---线程池的封装
    原文链接:[C#]非同步呼叫方法並跳出處理中視窗|愛流浪的小風-點部落(dotblogs.com.tw)前言 當我們在Winform進行某些比較花時間的運算時,若沒有使用非同步的方法來呼叫,畫面上的視窗就會顯示沒有回應,這是一種比較差的使用者體驗,可能會讓使用者以為當機了,在這邊為了方便......
  • ArrayBox封装
    设计一个类替代数组可以做的事情 数组长度是固定存储一组元素 长度一旦固定使用起来不太方便添加元素删除元素 设计一个类---充当一个小容器ArrayBox 能添加元素获取元素删除元素看一看到底有几个//你们是使用者(用户)         ......
  • vue3实现自定义指令
    创建一个empty.jsimport{nextTick}from'vue';constemptyImgUrl=newURL('@/assets/images/empty-icon.jpeg',import.meta.url).href;//在vue3中不支持require引入静态图片,这是一种引入方式另外一种是直接importconstempty={install(app,options){app......
  • Vue中ref和$refs的介绍及使用
    在JavaScript中需要通过document.querySelector("#demo")来获取dom节点,然后再获取这个节点的值。在Vue中,我们不用获取dom节点,元素绑定ref之后,直接通过this.$refs即可调用,这样可以减少获取dom节点的消耗。ref介绍: ref被用来给元素或子组件注册引用信息。引用信息将会注册在父......
  • provide / inject替代 Vuex
    provide/inject可以解决上述弊端A.vue–>B.vue,用法://A.vueexportdefault{provide:{name:'Aresn'}}//B.vueexportdefault{inject:['name'],mounted(){console.log(this.name);//Aresn}}provide/inject替代VuexVuex做状态管理,它是一个专为......
  • vue之vue-cli创建项目、vue项目目录结构、vue项目编写规范、 es6导入导出语法
    目录一、vue-cli创建项目1.1、背景知识单页面应用:spa单文件组件(一个组件一个文件)一个组件中有的东西使用vue-cli创建vue项目,才能使用单文件组件vue-cli脚手架,1.2使用vue-cli创建vue项目1.3vue-cli创建项目vue-cli命令行创建项目使用vue-cli-ui创建运行vue项目方式一:命令行中......
  • Electron+vue+element ui+vscode+git桌面程序-小白篇 超详细
    一.说明背景:有需求,要求做一个简单的桌面程序。调研后决定采用:web方式写页面,然后打包为桌面程序选技术为:Nodejs+Electron+vue+elementui+vscode+git二.环境Node.js应用基于js,所以需要先安装Node.js。(建议LTS)下载地址:https://nodejs.org/zh-cn/download/ 下载完成后,傻瓜式一键安装......
  • Vue3 之 响应式 API reactive、 effect源码,详细注释
    Vue3之响应式APIreactive、effect源码,详细注释目录一.实现响应式API:reactive、shallowReactive、readonly、shallowReadonly1.针对不同的API创建不同的响应式对象2.实现createReactiveObject3.实现不同的拦截函数baseHandlers.ts二.实现响应式effect1.创建响应式的......