vscode+gulp轻松开发小程序的完整步骤


Posted in Javascript onOctober 18, 2020

利用 gulp+vscode 来开发小程序的一个小工具,内置扩展了一系列的 wx 全局api方法,支持自定义配置相对应的信息和别名等问题

安装方法:

# 全局安装
npm install -g wechat-mini-gulp
# 当前小程序根目录下运行
wechat-gulp run init
# 安装依赖
npm install

运行

#开发环境
npm run gulpdev
#正式环境
npm run gulpbuild
# 测试环境
npm run gulptest
# 清空console
npm run gulpclean
# 同步routerConfig
npm run gulpsync

项目目录

根目录
├── gulp                    // gulp任务包
|   |—— pageTemplate        // 页面模板文件
|   |—— cleanplugIn         // 清空console-gulp插件
│   ├── changeEnvMode.js    // 修改环境变量
│   ├── config.js           // 配置
│   ├── createdWechatFile.js    // 新增ybf.js自动同步
│   ├── createdYbfcss.js        // 编译scss
│   ├── createdYbftsbuild.js    // 编译ts
│   ├── createYbfPageTask.js    // 编译ybf.js
│   ├── env.js                 // 环境变量
│   ├── gulpCleanConsole.js     // 清空console-任务队列
│   └── synsPages.js            // 同步app.json下的pages,后期可以处理路由权限
│   └── utils.js                // 工具方法
├── gulpfile.js             // gulp任务项
├── package.json            // npm依赖
└── toulPlugins                 // 扩展小程序路由方法,实体方法等
    |—— extendPage          // 扩展页面方法
    |—— extendWxApi         // 扩展wx内置方法
    |—— index               // 导出plugins下文件
    |—— routerHandle        // 伪造vue-router,代理wx内置跳转方法
    └── routesConfig        // 伪造vue-routes,里面为当前小程序页面路由

使用全局方法

在app.js下面引入

// 导入扩展方法
import './toulPlugins/index'

内置提供全局wx方法

获取运行变量

该文件位于 /gulp/env.js ,对外导出 env

api路由方法

将微信方法做了二次封装,扩展了相对应的 query 和 params 写法

wx.$router.push // 类似vue的vue.router.push
wx.$router.replace // 类似vue的vue.router.replace
wx.$router.switchTab // 对应微信tab组件的switchTab方法

wx.$router.push 和 wx.$router.replace 方法都支持传入的参数对象或者字符串,如下

// 参数是字符串
wx.$router.push('/pages/index/index')

// 参数是对象
wx.$router.push({
 url: '/pages/index/index',
 params: {},
 query: {}
 events: {} // 对应微信的派发事件
})

上面的方法传参,在每个页面内部可以通过 this.__query 获取到传过来的 query , this._params 获取传过来的 params

// 这种写法也支持 this.__params
wx.$router.push('/pages/index/index?id=1')

特别注意:!!!!!!

如果项目中需要进行分享处理,需要单独在 onLoad 拿到传入的参数,具体详情看

微信小程序页面路由(developers.weixin.qq.com/miniprogram… )

因为分享进来的代码,并没有经过 wx.$router.xxx 方法的处理

wxml页面路由方法

扩展了在 wxml 页面上面直接调用 $toPage 方法,可以直接调用 wx.$router.xxx ,

需要在标签上传入相对应的 data-xxx

data-url 需要跳转的路由地址

data-totype 跳转的方法,支持:

  • redirect 或 replace
  • switchTab
  • reLaunch
  • push 默认

具体使用如下

<view catch:tap="$goPage" data-url="/pages/mine/order/index?userType=isC&orderStatus=4" data-totype="push"></view>

上传图片

// pages.js
// 调用chooseImage后,返回来历史路径
wx.$wxUploadFile(tempFilePaths[0]).then(obj => {})
// 上传图片
wx.$wxUploadFile = (imageUrl) => {
}

节流函数

wx.$YBFThrottle = (cb, delay = 300) => {
 const nowPage = wx.$getNowPage()
 if (!nowPage.isCanClick) return
 nowPage.isCanClick = false
 cb && cb()

 setTimeout(() => {
 nowPage.isCanClick = true
 }, delay)
}

全局路由拦截处理

// /toulPlugins/extendWxApi.js
// 路由进入之前
wx.$beforeRouter = (from, to, next) => {
 // ...someCode
}

// 路由进入之后
wx.$afterRouter = (oldRoute, toRoute) => {
 // ...code
}

获取当前页面信息

// 拿到当前页面数据
wx.$getNowPage = () => {
 // ...code
}

获取上一页信息

// 拿到上一前页面数据
wx.$getPrevPage = () => {
 // ...code
}

确认弹窗confirm

带取消和确定按钮

// confirm 
// return promise
wx.$confirm = (options) =>{}

模态框toast

// return promise
wx.$toast = (msg, cb) => {}

复制copy

// return void
wx.$copy = (msg) => {}

once函数

wx.$once(fn)

默认配置

文件位于: gulp/config.js 距离

也可以自己扩展配置,需要在项目根目录下,新增 gulpconfig.js 文件,在进行更改

// gulpconfig.js

// 以下信息为内置默认配置
module.exports = {
 // 路径别名
 alisa: {
 '@plugins': "./plugins",
 '@scss': './scss',
 '@utils': './utils',
 '@api': './api',
 '@config': './config',
 '@images': './images'
 },
 // 需要编译的别名js文件,本工具默认监听ybf.js
 buildJsUrl: ['./pages/**/ybf.js'],
 // 这里建议写好文件的路径,方便gulp减少文件的监听
 
 // 需要编译的scss文件,如果是abc.scss 则编译成abc.scss
 buildScssUrl: ['./pages/**/*.scss', './components/**/*.scss'],
 
 // ts编译
 buildTsUrl: ['./**/*.ts'],
 // app.json路径 默认根目录
 appJsonFilePath: './app.json',
 // 是否开启ts编译
 isTs: false
}

routesConfig配置

该文件主要为了配置 wx.$beforeRouter 和 wx.$afterRouter 而配置的文件

文件位于 ./toulPlugins/routesConfig.js

例如:

export default [
 {
 path: 'pages/index/index' // app.json 相对应的 pages下的路径
 meta: {
  noPage: true // 提示 页面暂未开发
 }
 }
]

Gulp文件讲解

位于 /gulp 下

环境变量

实现小程序向webpack开发一样,自动编译api环境

// changeEnvMode.js
// 手动改变 /config/env.ts文件,默认mode=dev 并执行ts编译
function changeEnvMode(mode) {
 // ...somecode
 buildTypeScript({})
}

此文件的作用大大提高了api的调整,避免开发人员进行 注释关闭 相关代码

监听ybf.js生成index.js

// createYbfPageTask.js
// 监听ybf文件,解决文件@引入,只支持监听/pages目录下,并生成相对应的index.js,
function createYbfPageTask(event) {
 // ...somecode 
}

监听scss文件生成index.wxss

// createdYbfcss.js
// 该函数支持px转rpx 支持文件@引入,支持监听component和pages下的文件index.scss,生成相对应的index.scss
function createdYbfcss(event) {
 // ...somecode 
}

监听ts文件生成相对应的js

// buildTypeScript.js
// 监听当前目录下所有ts文件,改动一个ts文件后,所有ts文件都会自动编译
function buildTypeScript(event) {
 // ...somecode 
}

删除文件存在的console.log

// gulpCleanConsole.js
function gulpCleanConsole() {
 // ...somecode
}

监听新建ybf.js文件(此文件是重点)

// createdWechatFile.js
// 监听pages下所有文件的ybf.js生成,如果生成创建wxss,wxml,scss,ybf.js,json文件
function generateFile(event) {
 
 generateJson()
 generateRoute()
}
// 向app.json文件内部pages下新增页面路由
function generateJson(pageUrl) { 
}
// 向/toulPlugins/routesConfig.js做路由同步
function generateRoute(pageUrl) {}

在需要新建 小程序page 的时候,在相对应文件夹下,新增 ybf.js 文件就会新增创建相对应的小程序文件及路由

同步app.json的pages

// synsPages.js
// 该文件只为了同步app.json下pages对象,为了后期扩展进行路由拦截配置等问题
function syncPage() {}

欢迎star和pr

github地址: github.com/popup-jie/w…

总结

到此这篇关于vscode+gulp轻松开发小程序的文章就介绍到这了,更多相关vscode+gulp开发小程序内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
js报错 Object doesn't support this property or method的原因分析
Mar 31 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
Mar 01 Javascript
jquery cookie实现的简单换肤功能适合小网站
Aug 25 Javascript
asp.net+js实现金额格式化
Feb 27 Javascript
非常酷炫的Bootstrap图片轮播动画
May 27 Javascript
前端微信支付js代码
Jul 25 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
Aug 25 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
Jun 29 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
Jul 27 Javascript
微信小程序自定义弹窗实现详解(可通用)
Jul 04 Javascript
ionic3双击返回退出应用的方法
Sep 17 Javascript
JavaScript, select标签元素左右移动功能实现
May 14 Javascript
详解VUE中的插值( Interpolation)语法
Oct 18 #Javascript
vue自定义树状结构图的实现方法
Oct 18 #Javascript
axios封装与传参示例详解
Oct 18 #Javascript
详解如何使用React Hooks请求数据并渲染
Oct 18 #Javascript
js中复选框的取值及赋值示例详解
Oct 18 #Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
Oct 18 #Javascript
详解如何在Javascript中使用Object.freeze()
Oct 18 #Javascript
You might like
php下关于中英数字混排的字符串分割问题
2010/04/06 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
Javascript var变量隐式声明方法
2009/10/19 Javascript
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
JS实现可控制的进度条
2020/03/25 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python简单计算文件夹大小的方法
2015/07/14 Python
Python实现周期性抓取网页内容的方法
2015/11/04 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
通过实例了解python property属性
2019/11/01 Python
python 元组和列表的区别
2020/12/30 Python
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
股份合作协议书
2014/04/12 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python