因为是连续写的2篇随笔,废话不多说。直接进入正题。

选择预编译的工具时,笔者采用了gulp。虽然,如今市面上大多采用的多为webpack,使用gulp也是有自己的缘由的。

webpack的最主要特点是可以将项目大多数资源打包为单个Js。h5项目中,打包后可以减少文件的请求数量,而小程序是由微信侧控制,并且依赖目录结构的项目,webpack只能进行配置,分入口打包,最终生成的目录结构还是必须符合小程序的项目结构。

gulp同样可以达到预编译的需求,而且配置相对简单。所以就采用了gulp。

大部分的配置需求,都可以百度到。这里就挑一点关键点做一下讨论吧。

  1. 背景图的 base64 转换。这个问题可以使用gulp-base64插件,简单处理掉。但是,背景图和正常使用的 image 图片在相同文件夹下,会同样被打包到dist 目录中。造成冗余,我采用的处理方法是,将背景图和 image 使用的本地图片分开存放,打包时,排除掉背景图的文件夹,仅被打包成base64 存入wxss文件。  all.concat(['!src/assets/bgImages/**'])
  2. 实时编译。可能大家第一印象,感觉简单的使用 gulp.watch 直接跑一次相应的任务就好了。但是,简单的这样配置会造成一个性能的问题。每个改动,编译大量文件。每个文件被修改都会触发小程序开发者工具的刷新。就会造成每次保存,都要等很久才会编译成功,看到页面效果。大大的减低编程效率。所以,在 gulp.watch 任务的中,加入了一个回调。
    function watchHandle (cb) {
    return e => {
    const newPath = changePath(e.path)
    if (e.type === 'deleted') {
    let distFile = './dist/' + Path.relative('./src', newPath);
    fs.existsSync(distFile) && fs.unlinkSync(distFile)
    } else {
    cb(newPath)()
    }
    console.log('File ' + e.path + ' was ' + e.type + ', running tasks...')
    }
    } gulp.watch(jsList, watchHandle(js))

    watchHandle ,就是接收到修改过的文件,然后将文件传入回调,进行处理的中间方法。
    其中,js 是针对 js 文件的预编译处理的回调方法。之后再讨论。

  3. 依照 process.env.NODE_ENV 做不同的配置。例如,开发与生产环境的域名请求。跳转到其他小程序的对应版本。
    采用的方法是,增加 config 目录,存放多个环境的配置文件。在打包时,依照 env 将对应的文件打包到 dist 目录下,并改为 index.js。再app.js 中直接引用,就可以直接取到对应环境的配置。

目前,感觉值得一提的也就只有上面3点。如之前所说,大部分的预编译配置,都是可以百度、谷歌找到,也比我来讲述的更加细致、全面。

完整的包,目前准备在随笔整理完之后,处理掉公司相关的内容,再上传到github开源。如果有需要,可能提前传部分配置。还是要先看各位看官的需要吧。

至于下一篇,就有空的时候再来发吧。应该会写按钮的封装,因为,路由有点问题还在解决中,完成了再来讨论与开源。

下次再见。。

spa 小程序的研发随笔 (2) --- 预编译的更多相关文章

  1. spa 小程序的研发随笔 (1) --- 前言

    半年前跳槽, 新公司主要研发倾向于小程序的开发.由于之前并没有接触小程序,所以经过半年的实际开发,才敢来做一点笔记. 小程序提供很多组件给开发者使用,但是,实际使用中还是会有很多的问题. 小程序的组件 ...

  2. 微信小程序点击图片放大预览

    微信小程序点击图片放大预览使用到 wx.previewImage 接口,可以放大.上/下一张 上代码 wxml代码 <view class='content-img' wx:if="{ ...

  3. 微信小程序--背景图片手机无法预览

    目前小程序好像没有支持手机预览背景本地图片,所以将本地图片改为网络图片链接就可以了 background: url("https://..../img/no.png") no-re ...

  4. (干货)微信小程序之上传图片和图片预览

    这几天一直负责做微信小程序这一块,也可以说是边做边学习吧,把自己做的微信小程序的一些功能分享出来,与大家探讨一下,相互学习相互进步. 先看下效果图 只写了一下效果样式的话希望大家不要太在意,下面马路杀 ...

  5. 微信小程序 - 分包加载(预下载)

    开发者可以通过配置,在进入小程序某个页面时,由框架自动预下载可能需要的分包,提升进入后续分包页面时的启动速度.对于独立分包,也可以预下载主包. 配置方法 预下载分包行为在进入某个页面时触发,通过在 a ...

  6. 微信小程序实战篇-图片的预览、二维码的识别

    开篇 今天,做的小程序项目要求,个人中心的客服图片在用户长按时可以识别其二维码,各种翻阅查找,采坑很多,浪费了很多时间,在这里记录下需要注意的点,以及对小程序官方提供的API做一个正确和清晰的认知,希 ...

  7. 微信小程序开发之真机预览

    1:真机预览时上传组件的坑: 当在真机里面使用上传组件,当进入选择相片或者拍照的时候,小程序会进入后台,调用APP onHide()方法,选择完返回小程序是会调用App Onshow()方法,然后调用 ...

  8. 微信小程序之上传图片和图片预览

    这几天一直负责做微信小程序这一块,也可以说是边做边学习吧,把自己做的微信小程序的一些功能分享出来,与大家探讨一下,相互学习相互进步. 先看下效果图 只写了一下效果样式的话希望大家不要太在意,下面马路杀 ...

  9. 微信小程序之base64图片如何预览与一键保存到本地相册?

    需求:由于后台服务器各方面的限制,现在服务器返回的图片是base64格式的,小程序端需要支持预览图片和多个图片一键下载功能 一.如何预览base64位图片? WXML页面:item.src的值是bas ...

随机推荐

  1. ERROR 1010 (HY000): Error dropping database (can't rmdir './nsd', errno: 39)

    在删除数据库的时候报标题所示错误 mysql> drop database test; ERROR 1010 (HY000): Error dropping database (can't rm ...

  2. Unity MMORPG游戏优化经验分享

    https://mp.weixin.qq.com/s/thGF2WVUkIQYQDrz5DISxA 今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORP ...

  3. hortonworks docker 安装

    1. 下载并解压安装脚本:  Hortonworks Data Platform (HDP) for Docker 2. 进入到解压后的目录,运行下面的命令,{HDPversion} 需要替换成相应目 ...

  4. emmet高级技巧

    编写好HTML和CSS代码时,我们也需要修改或添加一些内容,Emmet提供了很多非常独特的工具,可以大大提高编辑体验,下面我们挑选几个常用的功能来介绍. 萨龙龙发现在sublime text中安装的E ...

  5. Django 04 模板标签(if、for、url、with、autoeacape、模板继承于引用、静态文件加载)

    Django 04 模板标签(if.for.url.with.autoeacape.模板继承于引用.静态文件加载) 一.if.for.url.with.autoescape urlpatterns = ...

  6. onbeforeunload与onunload事件

    Onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本中通过 window.onunload来指定或者在<body>里指定.区别在于o ...

  7. 【ACM】Binary String Matching

    Binary String Matching 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Given two strings A and B, whose alp ...

  8. Python——连接数据库

    好用的教程(*^▽^*):https://www.cnblogs.com/fatcat132006/p/4081576.html

  9. JS——变量和函数的预解析、匿名函数、函数传参、return

    JS解析过程分为两个阶段:编译阶段.执行阶段.在编译阶段会将函数function的声明和定义都提前,而将变量var的声明提前,并将var定义的变量赋值为undefined. 匿名函数: window. ...

  10. python入门之time模块和datetime模块

    time模块 时间三种表示:时间戳(秒单位),struct_time(元组,可以分开调用),指定格式(格式化) time.sleep() 等待5秒钟 time.time() 返回时间戳 time.ct ...