Parcel 是一个零配置的网络应用打包工具, 适用于经验不同的开发者, 它利用多核处理提供了极快的速度。对比 webpack 最大的两个亮点:

  • 零配置
  • 极快速

omi 相关的插件都是基于 webpack 进行开发,今天正式投入 Parcel 怀抱。

准备工作

通过 yarn 或 npm 安装 parcel:

  1. yarn global add parcel-bundler

or:

  1. npm install -g parcel-bundler

创建一个 package.json 文件:

  1. yarn init -y

or

  1. npm init -y

创建完的内容大概是这样:

  1. {
  2. "name": "omi-tap",
  3. "version": "0.1.0",
  4. "description": "Support tap event in your Omi project.",
  5. "main": "index.js",
  6. "scripts": {
  7. "start": "parcel example/index.html --open",
  8. "test": "echo \"Error: no test specified\" && exit 1"
  9. },
  10. "keywords": ["tap","omix","omi","omi-tap"],
  11. "author": "dntzhang",
  12. "license": "MIT",
  13. "dependencies": {},
  14. "devDependencies": {
  15. "omix": "^1.2.4",
  16. "babel-preset-env": "^1.6.1",
  17. "babel-preset-omi": "^0.1.0",
  18. "parcel-bundler": "^1.2.0"
  19. }
  20. }

devDependencies是开发时候的依赖包,parcel-bundler全局安装完后,可以使用下面命令来打包:

  1. parcel example/index.html --open

带上--open会自动打开浏览器。parcel打包可以使用js或者html为入口文件。

添加 .babelrc ,如下:

  1. {
  2. "presets": [
  3. "env", "omi"
  4. ]
  5. }

实现 omi-tap

  1. Omi.extendPlugin('omi-tap', function (dom, instance) {
  2. var x1,
  3. y1,
  4. scrollTop
  5. dom.removeEventListener('touchstart', dom._preTouchStart, false)
  6. dom.removeEventListener('touchend', dom._preTouchEnd, false)
  7. dom.addEventListener('touchstart', start, false)
  8. dom.addEventListener('touchend', end, false)
  9. dom._preTouchStart = start
  10. dom._preTouchEnd = end
  11. function start(evt) {
  12. x1 = evt.touches[0].pageX
  13. y1 = evt.touches[0].pageY
  14. scrollTop = document.body.scrollTop
  15. }
  16. function end(evt) {
  17. if (Math.abs(evt.changedTouches[0].pageX - x1) < 30 && Math.abs(evt.changedTouches[0].pageY - y1) < 30 && Math.abs(document.body.scrollTop - scrollTop) < 30) {
  18. getHandler('tap', dom, instance)(evt)
  19. }
  20. }
  21. })
  22. function getHandler(name, dom, instance) {
  23. var value = dom.getAttribute(name)
  24. if (value === null) {
  25. if (dom[name]) {
  26. return function (evt) {
  27. dom[name].bind(instance)(evt, dom)
  28. }
  29. }
  30. return noop
  31. } else {
  32. return function (evt) {
  33. instance[value].bind(instance)(evt, dom)
  34. }
  35. }
  36. }

omi 的插件体系通过 Omi.extendPlugin(pluginName, fn) 方法实现,相当于后置处理器,插件方法会在组件 mounted/installed 之后执行。上面的 tap 的原理:

  • 判断触摸前后的距离是否小于30
  • 判断触摸前后的滚动条位置是否小于30

同时满足上面两个条件触发 tap 事件。

插件使用

  1. npm install omix
  2. npm install omi-tap

然后:

  1. import { Component } from 'omix';
  2. import 'omi-tap';
  3. class App extends Component {
  4. tapHandler(evt) {
  5. alert('Hello Omi + Parcel!')
  6. }
  7. render() {
  8. return (
  9. <div>
  10. <h1 omi-tap tap={this.tapHandler}>Hello Omi + Parcel
  11. 使用parcel替代webpack制作omi-tap插件的更多相关文章

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

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

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

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

      1. webpack + vue 项目 自定义 插件 解决 前端 JS 版本 更新 问题
      1. Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 它的异步加载原理是,事先将编译好后的静态文件,通过js对象映射,硬编 ...

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

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

      1. webpack 教程 那些事儿03webpack两大精华插件,热加载
      1. 本节主要讲述 webpack的两大经典开发调试插件,热插拔内存缓存机制 文章目录 1. html-webpack-plugin插件的使用 2. webpack-dev-middleware 插件登场 ...

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

    1. 随机推荐

        1. bootmybatis
        1. 特别注意,此种方法和starter不兼容,我用了两个方式混蛋,发现跑不起来! spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driv ...

        1. StringBuilderStringBuffer实现的Unicode解码方法的比较(Java
        1. 初衷是用正则来写一个Unicode字符串转码的方法,一开始是打算结合StringBuilder写的,但是看到jdk7Matcher.appendReplacement文档中一段示例代码用了Match ...

        1. JAVA基础面试(四)
        1. 31.String s = new String("xyz");创建了几个StringObject?是否可以继承String类? 两个或一个都有可能,"xyz" ...

        1. webpack 3.X学习之初始构建
        1. webpack是什么 webpack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Sass,TypeScript等),并 ...

        1. MySQL分类表设计--根据ID删除全部子类
        1. 在做数据库分类表的时候,通常会有这样的设计:一个字段是ID,另一个字段PID,PID指向自己的上级分类: 这样的设计带来的问题是:我要删除一个类,我希望它的子类全部一起删除: 在不知道分类有多少层级的 ...

        1. Foundation基础框架
        1. 自己总结的 // // main.m // 01-结构体 // // Created by Mac-ZhangXiaoMeng on 14/12/29. // Copyright (c) 2014年 ...

        1. [Machine Learning]学习笔记-线性回归
        1. 模型 假定有i组输入输出数据.输入变量可以用\(x^i\)表示,输出变量可以用\(y^i\)表示,一对\(\{x^i,y^i\}\)名为训练样本(training example),它们的集合则名为训 ...

        1. TestLink使用
        1. zend FrameworkMVC模式的搭建
        1. 1.首先搭建ApacheMySQL,搭建的Apache中必须有PDO_MYSQL模块,如果没有,可以到官方下载. 1.配置HTTP.CONF (1)进入Apacheconf目录下,打开httpd. ...

        1. Python入门 - 函数方法
        1. 本节主讲python函数的基本用法,主要包括传递参数.匿名函数和变量作用域. 一.传递参数 python除了传递必需参数外,还可以传递默认参数,不定长参数和关键字参数. 1. 传递必需参数 def m ...