vue 用npm提示编译错误_从零到一教你基于vue开发一个组件库

v2-db09aa493dd22f448aaf9361f5baf308_b.jpg

前言

Vue是一套用于构建用户界面的渐进式框架,目前有越来越多的开发者在学习和使用.在笔者写完

徐小夕:如何从0到1教你搭建前端团队的组件系统​zhuanlan.zhihu.com
v2-07680a74b745b7bd4a433203b341ec80_180x120.jpg

之后很多朋友希望了解一下如何搭建基于vue的组件系统,所以作为这篇文章的补充,本文来总结一下如何搭建基于vue的组件库.

虽然笔者有近2年没有从事vue的开发了,但平时一直在关注vue的更新和发展, 笔者一直认为技术团队的组件化之路重点在于基础架构的搭建以及组件化的设计思想,我们完全可以采用不同的框架实现类似的设计,所以透过现象看本质,思想才是最重要的.本文主要教大家通过使用vue-cli3 一步步搭建一个组件库并发布到npm上,但笔者认为重点不在于实现搭建组件库的具体方式,而在于设计组件库的思想和取舍.

你将收获

  • 使用vue-cli3搭建团队的组件库并发布到npm
  • npm发包的常用基础知识

相关资料

徐小夕:如何从0到1教你搭建前端团队的组件系统​zhuanlan.zhihu.com
v2-07680a74b745b7bd4a433203b341ec80_180x120.jpg
徐小夕:vue进阶系列——用typescript玩转vue和vuex​zhuanlan.zhihu.com
v2-c2bd2bd6df88862c8bc950c139c72d55_180x120.jpg
徐小夕:2年vue项目实战经验汇总​zhuanlan.zhihu.com
v2-0f93ae8f3eee12dc9c9059ba3ec5c071_180x120.jpg

正文

本文假设大家对vue有一定的了解,并熟悉vue-cli3的配置.首先我们在搭建组件库的时候,一定要清楚是否有必要搭建,如果项目是一次性的或者不同项目中不存在可复用的组件,那么搭建组件库是没有必要的,反之如果团队存在多个不同的项目都会使用一致的组件设计规范,那么搭建组件库无疑是不二选择.接下来我们直接开始实现组件库的搭建.

1.安装vue-cli3并创建一个项目

首先我们先安装开发必要的工具集,并创建一个项目:

yarn 

我们安装完依赖并进入项目启动服务后vue-cli3会自动给我们展示一个默认页面,关于vue的组件库目录结构,笔者参考element的来组织,大家也可以按照自己团队的风格来设计.首先我们看看原来的目录结构:

v2-f3169734a230f4fbf8e902b549eebb56_b.jpg

我们做如下调整:

v2-d362e463d6607511e46888c7695b3cfd_b.jpg

我们将src重命名为examples, 并添加packages目录,用来存放我们的自定义组件. 但是cli默认会启动src下的服务,如果目录名变了,我们需要手动修改配置,vue-cli3中提供自定义打包配置项目的文件,我们只需要手动创建vue.config.js即可.我们具体修改如下:

module

首先修改入口文件地址为examples下的main.js,其次将packages加入打包编译任务中.

2.编写组件代码

首先我们拿一个Button组件来示范,这里只实现一个比较简单的组件,如果大家想了解更加详细的组件设计方法和思路,可以参考笔者的组件设计相关的文章。 首先我们先在packages目录下新建一个Button目录,然后src里存放组件的源代码:

<

vue和react组件设计中会大量应用插槽机制,比如vue里的slot标签, react的children等,所以这一块大家可以重点关注一下。 我们在在Button的index.js里编写如下代码来作为vue的组件安装:

// 导入组件,组件必须声明 name

Button的组件结构如下:

v2-1b7648aacb3ee37a4551fcf3fb4a3c57_b.jpg

接下来我们在packages的入口文件中导入组件并安装导出:

// 导入button组件

上面的install步骤和导出步骤非常关键,大家需要按照规则配置,这也是vue组件注册的规则之一。详细文档大家可以看vue官网的组件篇。

3.测试代码

我们要想看到自己写的组件效果,可以将组件导入到examples目录下的main.js中,其本质就是一个项目的开发目录,我们只需要按照如下方式导入即可:

// examples/main.js

这种方式是全局导入,至于按需导入,完全可以采用element的方式来配置,对于业务组件来说,一般项目中都是使用的到,所以全局导入比较合适,作为UI库来说,按需导入可能更适合。

接下来我们就可以在项目中使用我们的组件了:

<

效果如下:

v2-8625d7292b83716122ed9a7753581d8f_b.jpg

大家也可以采用elemnt开发更加美观的说明文档。

4.配置package.json文件

作为一个组件库,我们必须按照npm的发包规则来编写我们的package.json, 我们先来解决组件库打包的问题,首先我们需要让脚手架编译我们的组件代码,并输出到指定目录下,我们按照发包规范一般会输出到lib目录下,代码如下:

"scripts"

我们的lib脚本就是用来打包packages的组件代码到lib目录下,文件名为以--name指定的名称前缀开头,我们执行脚本会输出类似如下代码:

v2-b472b899fa79eb7960cf7b9668980fb9_b.jpg

其次我们需要编写package文件的description,keywords等,具体介绍如下: description 组件库的描述文本 keywords 组件库的关键词 license 许可协议 repository 组件库关联的git仓库地址 homepage 组件库展示的首页地址 main 组件库的主入口地址(在使用组件时引入的地址) private 声明组件库的私有性,如果要发布到npm公网上,需删除该属性或者设置为false publishConfig 用来设置npm发布的地址,这个配置作为团队内部的npm服务器来说非常关键,可以设置为私有的npm仓库

还有很多配置具体要看团队的要求和规范,这里就不一一举例了.具体配置源码可参考地址 xui.

5.发布到npm

发布到npm的方法也很简单, 首先我们需要先注册去npm官网注册一个账号, 然后控制台登录即可,最后我们执行npm publish即可.具体流程如下:

// 本地编译组件库代码

发布之后效果如下:

v2-40ed48fa280a5a35d30297c6ef747677_b.jpg

之后我们就可以通过如下方式使用了:

import 

关于npm相关的知识笔者在这里简单提一下,大家可以参考学习.

1. .npmignore 配置文件

.npmignore配置文件类似于 .gitignore 文件,如果没有 .npmignore,会使用.gitignore来取代他的功能。

2. npm发包的版本管理

npm的发包遵循语义化版本,一个版本号格式如下:Major.Minor.Patch,每一部分具体介绍如下: Major 表示主版本号,做了不兼容的API修改时需要更新 Minor 表示次版本号,做了向下兼容的功能性需求时需要更新 * Patch 表示修订号, 做了向下兼容的问题修正时需要更新

对应的npm也提供了脚本帮我们实现自动更新版本号,如下:

npm 

还有更加深入的知识比如版本的tag化这些,大家感兴趣也可以研究一下. 本文的组件库搭建参考element的目录组织方式,大家也可以直接采用element或者其他开源组件库的脚手架来实现.

最后

如果想获取更多项目完整的源码, 或者想学习更多H5游戏, webpacknodegulpcss3javascriptnodeJScanvas数据可视化等前端知识和实战,欢迎在《趣谈前端》专栏学习讨论,共同探索前端的边界。

更多推荐

徐小夕:2年vue项目实战经验汇总​zhuanlan.zhihu.com
v2-0f93ae8f3eee12dc9c9059ba3ec5c071_180x120.jpg
徐小夕:15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)​zhuanlan.zhihu.com
v2-01056050f2d7310e528a8f4e6082ec48_180x120.jpg
徐小夕:前端开发中79条不可忽视的知识点汇总​zhuanlan.zhihu.com
v2-b4997198ebe59fb6685798ccbd7a0d74_180x120.jpg
徐小夕:如何从0到1教你搭建前端团队的组件系统​zhuanlan.zhihu.com
v2-07680a74b745b7bd4a433203b341ec80_180x120.jpg
徐小夕:10分钟教你手写8个常用的自定义hooks​zhuanlan.zhihu.com
v2-55119d7318a2848d3ba3f5ae746168d6_180x120.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是从零开始封装一个基于videojs和Vue的动态source的视频播放器组件的步骤: 1. 安装video.js和vue-video-player 使用npm安装video.js和vue-video-player: ``` npm install video.js vue-video-player --save ``` 2. 创建Vue组件 在src/components目录下创建一个VideoPlayer.vue的文件,该文件包含以下内容: ```html <template> <div> <video ref="videoPlayer" class="video-js vjs-default-skin vjs-big-play-centered"></video> </div> </template> <script> import videojs from 'video.js'; import 'video.js/dist/video-js.css'; import 'vue-video-player/src/custom-theme.css'; import 'vue-video-player/src/font/font.css'; import 'vue-video-player/src/assets/video-player.css'; export default { name: 'VideoPlayer', props: { sources: { type: Array, required: true }, options: { type: Object, default: () => ({}) } }, mounted() { this.initPlayer(); }, beforeDestroy() { if (this.player) { this.player.dispose(); } }, methods: { initPlayer() { const video = this.$refs.videoPlayer; const playerOptions = Object.assign({ controlBar: { children: { playToggle: {}, progressControl: {}, remainingTimeDisplay: {}, fullscreenToggle: {} } }, sources: this.sources }, this.options); this.player = videojs(video, playerOptions, function onPlayerReady() { console.log('Player ready'); }); } } }; </script> ``` 3. 在Vue项目使用该组件 在需要使用视频播放器的Vue组件引入VideoPlayer组件,并传入sources和options参数: ```html <template> <div class="app"> <VideoPlayer :sources="sources" :options="options"></VideoPlayer> </div> </template> <script> import VideoPlayer from '@/components/VideoPlayer.vue'; export default { name: 'App', components: { VideoPlayer }, data() { return { sources: [ { src: 'http://example.com/path/to/video.mp4', type: 'video/mp4' } ], options: { autoplay: false, controls: true, preload: 'auto', fluid: true } }; } }; </script> ``` 这样就完成了从零开始封装一个基于videojs和Vue的动态source的视频播放器组件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值