概述

clipboard.js 是一个非常好用的剪切板插件,但是随着前端框架的演变,用户与网页交互的方式越来越多,不仅限于点击事件了,并且在很多情况下,我们可能不需要它强制性自带的点击事件,所以我打算把 clipboard.js 精简一下,把点击事件删掉,这就是我开发 easy-clipboard 这个库的初衷。

值得说明的是,这是我第一个完整结合 ts + rollup + demo + jest 写的一个库!

项目地址

遇到的困难

1.semantic error TS2531: Object is possibly 'null'.

在打包的时候,ts报了上面的错误,报错代码是:

window.getSelection().removeAllRanges()

我查了很久解决方法,在百度、google 里面查过,在 typescript 文档里面查过,在 stackoverflow 里面查过,都没有成功(网上有很多解决方案是很老的,现在的 ts 已经不用那种写法了),后来在一个偶然的机会下,我看到了感叹号的写法,然后通过冷静分析报错内容,并在 node_modules 的 @types 里面查找 window 的定义,通过理智分析,才发现应该是由于 window.getSelection() 的值可能是 null 造成的。最后在它的后面加了一个感叹号解决了(这是 ts 的新语法)。

2.document.createRange() is undefined

在用 jest 进行测试的时候,我遇到了上面的报错。通过定位,我发现是在一个依赖包 select 包里面发生了上面的报错。我本来以为通过 jest 设置屏蔽 node_modules 里面的依赖就可以解决,但是通过查阅文档,我发现 vue-cli 的默认 jest 设置已经帮我屏蔽了 node_modules 里面的包。最后我通过打印 document.createRange 的内容才发现,这个报错的原因是因为 jest 所依赖的 JSDOM 里面的 document 没有 createRange 这个方法,所以最后我 mock 了这个方法解决了。这里我才知道,在使用 jest 的时候,并不是完全像在浏览器里面一样,有些方法还是要自己 mock 。

3.Please provide the repository token to upload reports via -t :repository-token

在使用 codecov 上传覆盖率结果的时候,我遇到了上面的报错。通过查阅官网,我明白了通过 circleci 工具是可以不需要这个 token 的,但是 circleci 只能免费使用一个 repo,而我在另一个 repo 里面使用了 circleci,所以我并不打算在这里使用 circleci。只能继续查阅资料了,最后我通过查阅 codecov 这个包的文档时发现,它支持下面这种写法,问题解决。

export CODECOV_TOKEN=":uuid-repo-token"
# or
./node_modules/.bin/codecov --token=:token

安利自己写的easy-clipboard库的更多相关文章

  1. 新写的c++日志库:log4K

    网是开源的c/c++日志库也不少,但用起来总觉得不方便,于是动手写了一个C++日志框架Log4K. 测试代码: #include "log4k.h" #pragma comment ...

  2. 原生javascript写自己的运动库(匀速运动篇)

    网上有很多JavaScript的运动库,这里和大家分享一下用原生JavaScript一步一步写一个运动函数的过程,如读者有更好的建议欢迎联系作者帮助优化完善代码.这个运动函数完成后,就可以用这个运动函 ...

  3. 手把手教你写 Vue UI 组件库

    最近在研究 muse-ui 的实现,发现网上很少有关于 vue 插件具体实现的文章,官方的文档也只是一笔带过,对于新手来说并不算友好. 笔者结合官方文档,与自己的摸索总结,以最简单的 FlexBox  ...

  4. 手写一个虚拟DOM库,彻底让你理解diff算法

    所谓虚拟DOM就是用js对象来描述真实DOM,它相对于原生DOM更加轻量,因为真正的DOM对象附带有非常多的属性,另外配合虚拟DOM的diff算法,能以最少的操作来更新DOM,除此之外,也能让Vue和 ...

  5. 如何手写一个js工具库?同时发布到npm上

    自从工作以来,写项目的时候经常需要手写一些方法和引入一些js库 JS基础又十分重要,于是就萌生出自己创建一个JS工具库并发布到npm上的想法 于是就创建了一个名为learnjts的项目,在空余时间也写 ...

  6. 大概看了一天python request源码。写下python requests库发送 get,post请求大概过程。

    python requests库发送请求时,比如get请求,大概过程. 一.发起get请求过程:调用requests.get(url,**kwargs)-->request('get', url ...

  7. [翻译]怎么写一个React组件库(二)

    本文同步发布于知乎专栏 https://zhuanlan.zhihu.com/p/27434018,喜欢本文的就去知乎点个赞支持下吧- 引言 该系列文章将通过创建一个组件库来引导你学习如何构建自己的组 ...

  8. [翻译]怎么写一个React组件库(一)

    本文同步发布于知乎专栏 https://zhuanlan.zhihu.com/p/27401329,喜欢本文的就去知乎点个赞支持下吧- 引言 该系列文章将通过创建一个组件库来引导你学习如何构建自己的组 ...

  9. 自己写的Android图表库XCL-Charts一些旧的样例

    话说有了灵感就要抓住,来了兴趣就要去研究它. 所以尽管近期非常忙.但我还是没有丢下Android图表实现的研究.最终如今我的图表库基类 基本上已经有点模样了.不在是小打小闹,而是能依传入參数非常灵活的 ...

随机推荐

  1. Core 定时任务之HangFire

    ASP.NET Core 使用 Hangfire 很简单,首先,Nuget 安装程序包 > install-package Hangfire -pre 然后ConfigureServices添加 ...

  2. 美食家App开发日记4

    研究了卡片式布局中的Recyclerview的用法,但是调试了很长时间,导入包总是有问题,一到手机上运行就会闪退.还是在网上查了很多方法,很不开心我还是解决不了.

  3. 通过Excel表创建sql脚本

    Excel.sql脚本 1)准备好存有数据的excel表格: 这里我们有些小技巧可以让表下面和右边的表格隐藏,在第8行的位置按住“Ctrl+Shift+↓”可以选定下面的空格,然后鼠标右键 隐藏即可, ...

  4. 使用Async方法 Using Async Methods 精通ASP-NET-MVC-5-弗瑞曼 Listing 4-32.

  5. Creating Custom Helper Methods 创建自定义辅助器方法----辅助器方法 ------ 精通ASP.NET MVC 5

    创建内联的辅助器方法 和 拓展方法 好像类似的功能. 不过写在前台更直观

  6. c#数字图像处理(五)全等级直方图灰度拉伸

    灰度拉伸也属于线性点运算的一种,也可以通过上一节的程序得到.但由于它在点运算的特殊性,所以把它单独列出来进行介绍. 灰度拉伸定义 如果一幅图像的灰度值分布在全等级灰度范围内,即在0~255之间,那么它 ...

  7. Client API Object Model - Xrm object(3.4)

    Xrm对象是全局可用的,可以在代码中使用,而不必在客户机API中使用执行上下文. Xrm 包括了以下这些namespace Xrm 的官方文档 https://docs.microsoft.com/e ...

  8. 学_汇编语言_王爽版 要点采集笔记(未完待续…)

    第一章 基础知识 存储器(内存)存放CPU工作的指令和数据(CPU可以直接使用的信息在内存中存放):指令和数据都是二进制数没有任何区别,由CPU决定是数据还是指令 内存单元:存储器被分为若干个存储单元 ...

  9. 工具之sort

    转自:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参 ...

  10. STM8L15X 硬件I2C调试总结

    最近接到一个项目需要使用STM8L上硬件I2C与SN3731通信,用户方是个方案商,硬件设计人员也没留测试点,直接就把板子焊了拿来了.调试时除了swio口能用所有都不能用,硬件设计大概是为了显得自己焊 ...