首页 > 其他分享 >Vue封装组件并发布到npm仓库

Vue封装组件并发布到npm仓库

时间:2023-07-01 19:22:17浏览次数:35  
标签:npm Vue 封装 package pig 组件

前言

使用Vue框架进行开发,组件封装是一个很常规的操作。一个封装好的组件可以在项目的任意地方使用,甚至我们可以直接从npm仓库下载别人封装好的组件来进行使用,比如iview、element-ui这一类的组件库。但是每个公司的业务场景可能不同,开发人员还是得必须封装自己得组件,如果换了一个项目,那么我们就只能复制组件代码到新的项目里面去了,这样稍显麻烦,其实我们可以将组建上传到npm仓库,要用的时候可以直接从npm安装使用。

总结下来有两点好处:

方面使用,任何项目无缝衔接。
可作为开源项目,积累经验。

第一步:环境准备

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

(1)初始化Vue项目

vue create my-app
(2)运行项目

npm run serve

第二步:组件封装

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

这里我们打算封装两个组件:pig-button、pig-input,所以在package文件夹下面分别新建了存放两个组件代码的文件夹。

2.2 编写组件代码
这里我们就以pig-button组件为例,任意编写一点代码,代码如下:

//package/pig-button/index.vue
<template>
  <div>
    <button>我是测试按钮</button>
  </div>
</template>
<script>
export default {
  name: "pig-button", //组件名
};
</script>
<style scoped>
button {
  width: 100px;
  height: 50px;
  display: flex;
  align-items: center;
  justify-content: center;
  border: none;
  border-radius: 10px;
  cursor: pointer;
}
</style>

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

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <pig-button></pig-button>
  </div>
</template>

<script>
import PigButton from './package/pig-button/index.vue'

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

<style>
#app {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
}
</style>

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

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

//package/index.js
import PigButton from "../package/pig-button/index.vue"; // 引入封装好的组件
const coms = [PigButton]; // 将来如果有其它组件,都可以写到这个数组里

// 批量组件注册
const install = function (Vue) {
  coms.forEach((com) => {
    Vue.component(com.name, com);
  });
};

export default install; // 这个方法以后再使用的时候可以被use调用

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

你封装的组件可能里面又包含很多的子组件,比如element-ui,有很多的子组件,
所以封装的时候需要把所有的子组件都放到入口文件里面,暴露出来,这样使用的人,只需要从入口文件引入就可以了,

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

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

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

打包命令解释:

--target lib 关键字 指定打包的目录
--name 打包后的文件名字
--dest 打包后的文件夹的名称
然后执行打包命令:

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

第四步:发布到npm

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

npm init -y

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

4.2 发布到npm仓库
(1)注册账号

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

(2)设置npm源

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

npm config set registry=https://registry.npmjs.org
(3)添加npm用户

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

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

(4)发布npm

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

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

第五步:从npm安装使用

直接执行安装命令:

npm install pig-ui-test // 由于名字重复,改了个名字
然后在main.js引用注册,代码如下:

import PigUi from "pig-ui-test";
import "../node_modules/pig-ui-test/pig-ui.css";
Vue.use(PigUi);
这里单独引用了css,就和element-ui一样需要单独引入样式文件。

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

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <pig-button></pig-button>
  </div>
</template>
<script>
export default {
  name: 'App',
}
</script>

<style>
#app {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
}
</style>

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

总结
总体说来Vue组件封装发布到npm仓库整体难度不大,主要是理解Vue的install方法以及打包相关知识,其实最重要的还是如何封装一个适用范围广,扩展性高的公用组件。

标签:npm,Vue,封装,package,pig,组件
From: https://www.cnblogs.com/andy0816/p/17519753.html

相关文章

  • node npm
    一、nvm、npm、node介绍1.区别nvm:nodejs的版本管理工具,也就是说:一个nvm可以管理很多node版本和npm版本。nodejs:在项目开发时的所需要的代码库。npm:nodejs包管理工具,在安装的nodejs的时候,npm也会跟着一起安装,它是包管理工具,npm管理nodejs中的第三方插件。安装的时候......
  • 多端全栈项目实战:大型商业级代驾业务全流程落地SpringCloudAlibaba+Mysql+Redis+Docke
    多端全栈项目实战:大型商业级代驾业务全流程落地SpringCloudAlibaba+Mysql+Redis+Docker+Uniapp+Vue3随着移动互联网的快速发展和智能手机的普及,代驾服务成为了一个日益火热的行业。在这个行业中,如何构建一个具备商业级可靠性和扩展性的代驾业务系统成为了关键问题。本文将介绍一......
  • 绝无仅有的SpringBoot+Vue前后端分离项目《盈利宝》
    ​每天都在制造矛盾并解决矛盾的路上程序员的主要矛盾不是书和资料多不多的矛盾而是学着学着发现知识又更新了时间就像一台永不停歇的永动机向前不停地运作年初的flag渐行渐远管他前浪,还是后浪?能浪的浪,才是好浪!今天带你解锁 Springboot+Vue项目花了很长时间从头到尾......
  • vue中router-link路由携带参数跳转
    在对应的路由模块儿中path:'courseList/:id?'router-link中书写方法如下<templateslot-scope="scope"><router-link:to="{path:'/course/courseList/'+scope.row.id}">跳转按钮</router-link></el-ta......
  • uni.app 给大家推荐一个 非常牛的 插件 上传图片 上传 word 上传xlsx 上传pdf
     插件地址地址:https://ext.dcloud.net.cn/plugin?name=lsj-upload兼容vue2 vue3微信小程序 等等等等图片放在下面了使用方法里面有介绍又到了码农 最重要的时刻了ctrlc  ctrlv  大法   ......
  • uni.app上传图片/上传七牛云 vue2 es6
    uni.app上传图片可以使用uni.app里面的api//uni.chooseImage({ // success:(chooseImageRes)=>{ // consttempFilePaths=chooseImageRes.tempFilePaths; // uni.uploadFile({ // url:that.$unishow+'/common/upload',//仅为示例,非真实的接口地......
  • uni.app上传视频vue2 es6
    上传视频可以使用uni.app里面的api letself=this; uni.chooseVideo({ count:1, sourceType:['camera','album'], success:function(res){ console.log(res) self.showVideo=true self.addVideo=false self.src=......
  • 如何解决uni-app上传图片提示打包未添加Camera模块? uni.app es6 vue2
       可以在manifest.json来进行配置  这样就解决了 ......
  • vue中封装服务器地址/接口与设置请求头
    设置请求头首先创建一个放置服务器地址的js,如http.js,然后在http.js中引入axiosimportaxiosfrom"axios";如果没有axios,需要先安装,npmiaxios或者yarnaddaxois,然后重启服务器...直接上代码点击查看代码importaxiosfrom"axios";//导入axios//创建请求实......
  • Vue双向数据绑定原理(面试必问) vue双向绑定面试怎么说
    vue.js是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调来渲染视图。具体步骤1、需要observer的数据对象进行递归遍历,包括子属性对象的属性,都加上setter和getter这样的话,给这......