使用parcel替代webpack制作omi-tap插件
Parcel 是一个零配置的网络应用打包工具, 适用于经验不同的开发者, 它利用多核处理提供了极快的速度。对比 webpack 最大的两个亮点:
- 零配置
- 极快速
omi 相关的插件都是基于 webpack 进行开发,今天正式投入 Parcel 怀抱。
准备工作
通过 yarn 或 npm 安装 parcel:
yarn global add parcel-bundler
or:
npm install -g parcel-bundler
创建一个 package.json 文件:
yarn init -y
or
npm init -y
创建完的内容大概是这样:
{
"name": "omi-tap",
"version": "0.1.0",
"description": "Support tap event in your Omi project.",
"main": "index.js",
"scripts": {
"start": "parcel example/index.html --open",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": ["tap","omix","omi","omi-tap"],
"author": "dntzhang",
"license": "MIT",
"dependencies": {},
"devDependencies": {
"omix": "^1.2.4",
"babel-preset-env": "^1.6.1",
"babel-preset-omi": "^0.1.0",
"parcel-bundler": "^1.2.0"
}
}
devDependencies是开发时候的依赖包,parcel-bundler全局安装完后,可以使用下面命令来打包:
parcel example/index.html --open
带上--open会自动打开浏览器。parcel打包可以使用js或者html为入口文件。
添加 .babelrc ,如下:
{
"presets": [
"env", "omi"
]
}
实现 omi-tap
Omi.extendPlugin('omi-tap', function (dom, instance) {
var x1,
y1,
scrollTop
dom.removeEventListener('touchstart', dom._preTouchStart, false)
dom.removeEventListener('touchend', dom._preTouchEnd, false)
dom.addEventListener('touchstart', start, false)
dom.addEventListener('touchend', end, false)
dom._preTouchStart = start
dom._preTouchEnd = end
function start(evt) {
x1 = evt.touches[0].pageX
y1 = evt.touches[0].pageY
scrollTop = document.body.scrollTop
}
function end(evt) {
if (Math.abs(evt.changedTouches[0].pageX - x1) < 30 && Math.abs(evt.changedTouches[0].pageY - y1) < 30 && Math.abs(document.body.scrollTop - scrollTop) < 30) {
getHandler('tap', dom, instance)(evt)
}
}
})
function getHandler(name, dom, instance) {
var value = dom.getAttribute(name)
if (value === null) {
if (dom[name]) {
return function (evt) {
dom[name].bind(instance)(evt, dom)
}
}
return noop
} else {
return function (evt) {
instance[value].bind(instance)(evt, dom)
}
}
}
omi 的插件体系通过 Omi.extendPlugin(pluginName, fn)
方法实现,相当于后置处理器,插件方法会在组件 mounted/installed 之后执行。上面的 tap 的原理:
- 判断触摸前后的距离是否小于30
- 判断触摸前后的滚动条位置是否小于30
同时满足上面两个条件触发 tap 事件。
插件使用
npm install omix
npm install omi-tap
然后:
import { Component } from 'omix';
import 'omi-tap';
class App extends Component {
tapHandler(evt) {
alert('Hello Omi + Parcel!')
}
render() {
return (
<div>
<h1 omi-tap tap={this.tapHandler}>Hello Omi + Parcel
使用parcel替代webpack制作omi-tap插件的更多相关文章
- webpack编写一个plugin插件
插件向第三方开发者提供了 webpack 引擎中完整的能力.使用阶段式的构建回调,开发者可以引入它们自己的行为到 webpack 构建流程中.创建插件比创建 loader 更加高级,因为你将需要理解一 ...
- Parcel Vs Webpack
横空出世的Parcel近日成为了前端圈的又一大热点,在短短几周内就获得了13K的Star.作为前端构建工具新人的Parcel为什么能在短期内获得这么多赞同?他和老大哥Webpack比起来到底有什么优势 ...
- [译]Godot系列教程五 - 制作Godot编辑器插件
制作插件 下文仅针对2.1版本. 关于插件 插件是为编辑器扩展出更多有用工具的重要方式.它可以完全用GDScript和标准场景开发,甚至都不需重新加载编辑器就可生效.不像模块,你无需创建C++代码.也 ...
- 深入浅出的webpack构建工具---AutoDllPlugin插件(八)
深入浅出的webpack构建工具---AutoDllPlugin插件(八) DllPlugin插件能够快速打包,能把第三方依赖的文件能提前进行预编译打包到一个文件里面去.提高了构建速度.因为很多第三方 ...
- webpack + vue 项目 自定义 插件 解决 前端 JS 版本 更新 问题
Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 它的异步加载原理是,事先将编译好后的静态文件,通过js对象映射,硬编 ...
- C#制作ActiveX浏览器插件.net
开发环境:VS2008 第一步 创建项目 新建一个项目,选择“Windows窗体控件库”,创建一个用户控件项目“ActiveXDemo”(注意,这里起名不能用中文,否则后面会出问题),里面有个用户控件 ...
- webpack之 plugin(插件)
plugin plugin是插件的意思,通常用来对某个现有的架构就行拓展 webpack中的插件,就是对webpack现有功能的各种扩展,比如打包优化,文件压缩等 loader和plugin区别 lo ...
- webpack 教程 那些事儿03-webpack两大精华插件,热加载
本节主要讲述 webpack的两大经典开发调试插件,热插拔内存缓存机制 文章目录 1. html-webpack-plugin插件的使用 2. webpack-dev-middleware 插件登场 ...
- WordPress插件制作教程(六): 插件函数之动作(Actions)函数
这一篇为大家说一下WordPress插件函数吧,要制作插件,了解这些函数是非常有必要的 WordPress插件函数分为“动作”(Actions)和过滤器”(Filters),WordPress 使用这 ...
随机推荐
- 给GridControl中的某列添加图片
要让GridControl的某列显示图片只需要数据源中有图片就可以正确显示 1.给DataSet添加一列,格式为image ds.Tables[].Columns.Add("SIGN&quo ...
- 实战项目——mysql主从架构的实现
一主一从 1.1 环境准备: centos系统服务器2台. 一台用户做Mysql主服务器, 一台用于做Mysql从服务器, 配置好yum源. 防火墙关闭. 各节点时钟服务同步. 各节点之间可以通过主机 ...
- Ansible(一) 配置安装
puppet ruby开发 salt python开发,有客户端,使用Rabbitmq消息队列,支持并发,在机器数量很多时效果比ansible好. ansible python开发, 没有客户端,基于 ...
- Python网络编程篇之select和epoll
1. select 原理 在多路复⽤的模型中, ⽐较常⽤的有select模型和epoll模型. 这两个都是系统接⼝, 由操作系统提供. 当然, Python的select模块进⾏了更⾼级的封装. ⽹络 ...
- JAVA基础5——与String相关的系列(1)
与String相关的系列 String, 是JAVA中常见的一个引用类型,且其具有一定的特殊性. String类型被设置为final型,即不可继承,也就不可修改其中的实现. String可以改变吗 S ...
- Servlet交互【重定向 与 请求分派】详解
Servlet交互 在serlvet中,需要调用另外一个资源来对浏览器的请求进行响应,两种方式实现: 调用HttpServletResponse.sendRedirect 方法实现 重定向 调用Req ...
- Windows Intellij环境下Gradle的 “Could not determine Java version from ‘9.0.1’”的解决方式
当我导入Gradle项目初试Java spring的时候,遇到下面报错: Gradle complete project refresh failed Error:Could not determin ...
- eclipse工作空间的基本配置
今天我们来学习一个小技巧,就是如何配置eclipse,对你没看错,就是配置eclipse,为什么要学这个呢?这个不是很简单吗?没错,是简单,但越是简单的东西有的时候人们总是会忽略一些什么,从未造成损失 ...
- centos 自带mysql卸载时出现无法卸载情况
[dianyi@localhost ~]$ rpm -qa|grep mysql mysql-libs-5.1.52-1.el6_0.1.x86_64 [dianyi@localhost ~]$ rp ...
- python 小白(无编程基础,无计算机基础)的开发之路,辅助知识6 python字符串/元组/列表/字典互转
神奇的相互转换,小白同学可以看看,很有帮助 #1.字典dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type ...