热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

贡献你的力量开发一个Vue组件并发布到npm

最近在工作中写了一个面向PC端的Vue滚动组件,关于PC端的滚动组件以前也用过一些,但是没有找到特别满意的,所以自己想着把这个组件开源发布出去,希望能够帮到和我有类似需求的人吧!目

最近在工作中写了一个面向 PC 端的 Vue 滚动组件,关于 PC 端的滚动组件以前也用过一些,但是没有找到特别满意的,所以自己想着把这个组件开源发布出去,希望能够帮到和我有类似需求的人吧!

目标

  • 拥有 Dev 模式,能够边测试边开发组件
  • 构建完成后发布到 npm 上
  • 这个组件能够全局注册 也能够局部使用
  • 拥有 demo 能力 依靠于 github 的 pages 功能 直接展现该组件的使用效果

构建基本模版

首先我们需要 vue-cli 来为我们生成一个项目的初始模板。

npm install -g @vue/cli
# OR
yarn global add @vue/cli

vue init webpack-simple

cd project-name
npm init
git init

npm init 和 git init的过程就略过了

修改目录

接下来在src/目录下创建一个 components 目录,随后在 components 目录下建立你的组件,比如scrollbars.vue

继续在src/下创建index.js 这个 js 将会在 build 模式下作为入口 js 进行打包,如果你要导出多个组件也是可以的,只要导出一个对象即可

import Scrollbars from './components/scrollbars.vue'
Scrollbars.install = Vue => Vue.component(Scrollbars.name, Scrollbars)
export default Scrollbars

配置打包环境

为了方便我们的开发,需要配置一下 webpack 的打包配置。

首先在 package.json 里增加一条脚本 dmeo 该命令的作用是一键打包出一个用于 demo 页面的主 js 文件

"demo": "cross-env NODE_ENV=demo webpack --progress --hide-modules"

接下来就是比较核心的 webpack 配置

const NODE_ENV = process.env.NODE_ENV
// 为了方便在不同模式下的路径配置,我们配置三个map对象来匹配具体的模式,减少复杂的判断
// 三种基本模式
// 1 build - production 用于打包核心组件代码 别人引入的就是这个文件
// 2 dev - development 开发模式 调试你的组件
// 3 demo - 打包demo资源 打出来的js是包含完整的vue源码的
const enteyMap = {
production: './src/index.js',
development: './src/main.js',
demo: './src/main.js'
}
const pathMap = {
production: './dist',
development: './demo',
demo: './demo'
}
const publicMap = {
production: '/dist/',
development: '/demo/',
demo: '/demo/'
}
module.exports = {
entry: enteyMap[NODE_ENV], // 引入路径 build模式下直接引入组件自身
output: {
path: path.resolve(__dirname, pathMap[NODE_ENV]), // 输出路径
publicPath: publicMap[NODE_ENV], // 资源引入路径 为了方便我们的demo打包 开发模式和demo模式相同
filename: 'vue-scrollbars.js', // 你的组件名称
library: 'vue-scrollbars', // 填写组件名称即可 人家可以通过这个名称来引入
libraryTarget: 'umd',
umdNamedDefine: true
}
}

进行开发

由于我们修改了 publicPath 我们需要修改一下index.html的 js 路径

npm run dev

开始开发吧,尽情的在app.vue中引入你的组件并进行调试开发

创建demo

npm run demo

打包完成后你可以尝试在工程根目录运行http-server来检查demo能否正常运行。

到这一步你可以push到你的github仓库,并把gh-pages设置成master分支,那个地址应该就能展示你的demo了,别忘了放到readme中让大家看看哦!

发布

在最后的发布前记得在package.json里面填写上版本,关键词,描述,license等信息,并且写好README.md,LICENSE等文件. 这样可以更好的让别人了解和使用你的项目哦。

npm login
npm publish

注意可能会出现重名情况,这时候请使用你账户的命名空间

修改你的 package.json "name": "@zhangzhengyi12/vue-scrollbars" 别人引入的时候也要
加命名空间

最后还是留点私心,宣传一下最近写的一个滚动组件,主要面向 PC 端 ,如果你有类似的需求 不妨看看[https://github.com/zhangzheng…]


推荐阅读
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 随着前端技术的发展,越来越多的开发者开始使用react、vue等web框架,但很少有人深入理解这些框架的源码。然而,这些框架底层都是由原生的javascript构建而成。对于初学前端的人来说,可能会认为javascript很容易上手,但实际上只是因为它被高度封装了。与能够使用封装类的人相比,能够理解框架原理的人则处于另一个层面。本文将深入剖析jquery源码,探寻框架底层的原理,帮助读者更好地理解web框架的运行机制。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
在刀尖上起舞66_596
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有