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插件的更多相关文章

  1. webpack编写一个plugin插件

    插件向第三方开发者提供了 webpack 引擎中完整的能力.使用阶段式的构建回调,开发者可以引入它们自己的行为到 webpack 构建流程中.创建插件比创建 loader 更加高级,因为你将需要理解一 ...

  2. Parcel Vs Webpack

    横空出世的Parcel近日成为了前端圈的又一大热点,在短短几周内就获得了13K的Star.作为前端构建工具新人的Parcel为什么能在短期内获得这么多赞同?他和老大哥Webpack比起来到底有什么优势 ...

  3. [译]Godot系列教程五 - 制作Godot编辑器插件

    制作插件 下文仅针对2.1版本. 关于插件 插件是为编辑器扩展出更多有用工具的重要方式.它可以完全用GDScript和标准场景开发,甚至都不需重新加载编辑器就可生效.不像模块,你无需创建C++代码.也 ...

  4. 深入浅出的webpack构建工具---AutoDllPlugin插件(八)

    深入浅出的webpack构建工具---AutoDllPlugin插件(八) DllPlugin插件能够快速打包,能把第三方依赖的文件能提前进行预编译打包到一个文件里面去.提高了构建速度.因为很多第三方 ...

  5. webpack + vue 项目 自定义 插件 解决 前端 JS 版本 更新 问题

    Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 它的异步加载原理是,事先将编译好后的静态文件,通过js对象映射,硬编 ...

  6. C#制作ActiveX浏览器插件.net

    开发环境:VS2008 第一步 创建项目 新建一个项目,选择“Windows窗体控件库”,创建一个用户控件项目“ActiveXDemo”(注意,这里起名不能用中文,否则后面会出问题),里面有个用户控件 ...

  7. webpack之 plugin(插件)

    plugin plugin是插件的意思,通常用来对某个现有的架构就行拓展 webpack中的插件,就是对webpack现有功能的各种扩展,比如打包优化,文件压缩等 loader和plugin区别 lo ...

  8. webpack 教程 那些事儿03-webpack两大精华插件,热加载

    本节主要讲述 webpack的两大经典开发调试插件,热插拔内存缓存机制 文章目录 1. html-webpack-plugin插件的使用 2. webpack-dev-middleware 插件登场 ...

  9. WordPress插件制作教程(六): 插件函数之动作(Actions)函数

    这一篇为大家说一下WordPress插件函数吧,要制作插件,了解这些函数是非常有必要的 WordPress插件函数分为“动作”(Actions)和过滤器”(Filters),WordPress 使用这 ...

随机推荐

  1. Python 学习之路2

    这是我在大学上机实验的作业 实验一 将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 首先,先谈下我的设计思路: 设计思路: 1.    先需判断输入的number是不是一个数字( ...

  2. Nuxt框架实践

    前言 今天抽空过了遍nuxt文档,写了个实践demo,关于nuxt我已经断断续续看了好几遍了,自我感觉也算是入门了吧,从开发到上线心里都有底.后期打算在项目用起来的是nuxt框架,一些函数工具库,比如 ...

  3. java 之 建造者模式(大话设计模式)

    建造者模式,在笔者看来比较试用于,定制一个业务流程,而流程的细节又不尽相同,每个细节又必不可少,这时应考虑使用建造者模式. 大话设计模式-类图 先看下笔者写的一个简单的例子. /** * 所有建造过程 ...

  4. UITextField的使用小技巧

    [tf setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];//修改placeHolder ...

  5. Java数据结构和算法(五)——队列

    前面一篇博客我们讲解了并不像数组一样完全作为存储数据功能,而是作为构思算法的辅助工具的数据结构——栈,本篇博客我们介绍另外一个这样的工具——队列.栈是后进先出,而队列刚好相反,是先进先出. 1.队列的 ...

  6. codeforces 895A Pizza Separation 枚举

    codeforces 895A Pizza Separation 题目大意: 分成两大部分,使得这两部分的差值最小(注意是圆形,首尾相连) 思路: 分割出来的部分是连续的,开二倍枚举. 注意不要看成0 ...

  7. mysql中 union是什么鬼

    在sql注意时,经常会用到一个不怎么常用的联合查询 http://www.php20.com/forum.php?m ... &extra=page%3D1 清空表.从新执行一下以上链接中的s ...

  8. include、include_once、require、require_once其区别

    1.include: 载入文件.未找到文件,则产生E_WARNING 级别的警告错误,脚本继续运行. 2.include_once: 与include 语句作用相同,区别只是如果该文件已经被包含过,则 ...

  9. 深入理解ES6之—增强的数组功能

    创建数组 Array.of()方法 ES6为数组新增创建方法的目的之一,是帮助开发者在使用Array构造器时避开js语言的一个怪异点.Array.of()方法总会创建一个包含所有传入参数的数组,而不管 ...

  10. Netty与传统Server对比

    前言 本文旨在介绍传统Socket服务端与NIO服务端的差异. 以餐厅服务员简单举例,每个客人对应一个请求. 传统Socket / OIO public class OioServer { @Supp ...