vscode+gulp 舒舒服服开发小程序

Posted 进阶的前端萤火虫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vscode+gulp 舒舒服服开发小程序相关的知识,希望对你有一定的参考价值。

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

安装方法:

 
   
   
 
  1. # 全局安装

  2. npm install -g wechat-mini-gulp

  3. # 当前小程序根目录下运行

  4. wechat-gulp run init

  5. # 安装依赖

  6. npm install

运行

 
   
   
 
  1. #开发环境

  2. npm run gulpdev

  3. #正式环境

  4. npm run gulpbuild

  5. # 测试环境

  6. npm run gulptest

  7. # 清空console

  8. npm run gulpclean

  9. # 同步routerConfig

  10. npm run gulpsync

项目目录

 
   
   
 
  1. 根目录

  2. ├── gulp // gulp任务包

  3. | |—— pageTemplate // 页面模板文件

  4. | |—— cleanplugIn // 清空console-gulp插件

  5. ├── changeEnvMode.js // 修改环境变量

  6. ├── config.js // 配置

  7. ├── createdWechatFile.js // 新增ybf.js自动同步

  8. ├── createdYbfcss.js // 编译scss

  9. ├── createdYbftsbuild.js // 编译ts

  10. ├── createYbfPageTask.js // 编译ybf.js

  11. ├── env.js // 环境变量

  12. ├── gulpCleanConsole.js // 清空console-任务队列

  13. └── synsPages.js // 同步app.json下的pages,后期可以处理路由权限

  14. └── utils.js // 工具方法

  15. ├── gulpfile.js // gulp任务项

  16. ├── package.json // npm依赖

  17. └── toulPlugins // 扩展小程序路由方法,实体方法等

  18. |—— extendPage // 扩展页面方法

  19. |—— extendWxApi // 扩展wx内置方法

  20. |—— index // 导出plugins下文件

  21. |—— routerHandle // 伪造vue-router,代理wx内置跳转方法

  22. └── routesConfig // 伪造vue-routes,里面为当前小程序页面路由

使用全局方法

在app.js下面引入

 
   
   
 
  1. // 导入扩展方法

  2. import './toulPlugins/index'

内置提供全局wx方法

api路由方法

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

 
   
   
 
  1. wx.$router.push // 类似vue的vue.router.push

  2. wx.$router.replace // 类似vue的vue.router.replace

  3. wx.$router.switchTab // 对应微信tab组件的switchTab方法

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

 
   
   
 
  1. // 参数是字符串

  2. wx.$router.push('/pages/index/index')


  3. // 参数是对象

  4. wx.$router.push({

  5. url: '/pages/index/index',

  6. params: {},

  7. query: {}

  8. events: {} // 对应微信的派发事件

  9. })

`

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

 
   
   
 
  1. // 这种写法也支持 this.__params

  2. wx.$router.push('/pages/index/index?id=1')

特别注意:!!!!!!

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

微信小程序页面路由(https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/route.html)

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

wxml页面路由方法

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

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

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

  • redirect 或 replace

  • switchTab

  • reLaunch

  • push 默认

具体使用如下

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

上传图片

 
   
   
 
  1. // pages.js

  2. // 调用chooseImage后,返回来历史路径

  3. wx.$wxUploadFile(tempFilePaths[0]).then(obj => {})

  4. // 上传图片

  5. wx.$wxUploadFile = (imageUrl) => {

  6. }

节流函数

 
   
   
 
  1. wx.$YBFThrottle = (cb, delay = 300) => {

  2. const nowPage = wx.$getNowPage()

  3. if (!nowPage.isCanClick) return

  4. nowPage.isCanClick = false

  5. cb && cb()


  6. setTimeout(() => {

  7. nowPage.isCanClick = true

  8. }, delay)

  9. }

全局路由拦截处理

 
   
   
 
  1. // /toulPlugins/extendWxApi.js

  2. // 路由进入之前

  3. wx.$beforeRouter = (from, to, next) => {

  4. // ...someCode

  5. }


  6. // 路由进入之后

  7. wx.$afterRouter = (oldRoute, toRoute) => {

  8. // ...code

  9. }

获取当前页面信息

 
   
   
 
  1. // 拿到当前页面数据

  2. wx.$getNowPage = () => {

  3. // ...code

  4. }

获取上一页信息

 
   
   
 
  1. // 拿到上一前页面数据

  2. wx.$getPrevPage = () => {

  3. // ...code

  4. }

确认弹窗confirm

带取消和确定按钮

 
   
   
 
  1. // confirm

  2. // return promise

  3. wx.$confirm = (options) =>{}

模态框toast

 
   
   
 
  1. // return promise

  2. wx.$toast = (msg, cb) => {}

复制copy

 
   
   
 
  1. // return void

  2. wx.$copy = (msg) => {}

once函数

 
   
   
 
  1. wx.$once(fn)

默认配置

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

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

 
   
   
 
  1. // gulpconfig.js


  2. // 以下信息为内置默认配置

  3. module.exports = {

  4. // 路径别名

  5. alisa: {

  6. '@plugins': "./plugins",

  7. '@scss': './scss',

  8. '@utils': './utils',

  9. '@api': './api',

  10. '@config': './config',

  11. '@images': './images'

  12. },

  13. // 需要编译的别名js文件,本工具默认监听ybf.js

  14. buildJsUrl: ['./pages/**/ybf.js'],

  15. // 这里建议写好文件的路径,方便gulp减少文件的监听


  16. // 需要编译的scss文件,如果是abc.scss 则编译成abc.scss

  17. buildScssUrl: ['./pages/**/*.scss', './components/**/*.scss'],


  18. // ts编译

  19. buildTsUrl: ['./**/*.ts'],

  20. // app.json路径 默认根目录

  21. appJsonFilePath: './app.json',

  22. // 是否开启ts编译

  23. isTs: false

  24. }

routesConfig配置

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

文件位于 ./toulPlugins/routesConfig.js

例如:

 
   
   
 
  1. export default [

  2. {

  3. path: 'pages/index/index' // app.json 相对应的 pages下的路径

  4. meta: {

  5. noPage: true // 提示 页面暂未开发

  6. }

  7. }

  8. ]

Gulp文件讲解

位于 /gulp

环境变量

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

 
   
   
 
  1. // changeEnvMode.js

  2. // 手动改变 /config/env.ts文件,默认mode=dev 并执行ts编译

  3. function changeEnvMode(mode) {

  4. // ...somecode

  5. buildTypeScript({})

  6. }

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

监听ybf.js生成index.js

 
   
   
 
  1. // createYbfPageTask.js

  2. // 监听ybf文件,解决文件@引入,只支持监听/pages目录下,并生成相对应的index.js,

  3. function createYbfPageTask(event) {

  4. // ...somecode

  5. }

监听scss文件生成index.wxss

 
   
   
 
  1. // createdYbfcss.js

  2. // 该函数支持px转rpx 支持文件@引入,支持监听component和pages下的文件index.scss,生成相对应的index.scss

  3. function createdYbfcss(event) {

  4. // ...somecode

  5. }

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

 
   
   
 
  1. // buildTypeScript.js

  2. // 监听当前目录下所有ts文件,改动一个ts文件后,所有ts文件都会自动编译

  3. function buildTypeScript(event) {

  4. // ...somecode

  5. }

删除文件存在的console.log

 
   
   
 
  1. // gulpCleanConsole.js

  2. function gulpCleanConsole() {

  3. // ...somecode

  4. }

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

 
   
   
 
  1. // createdWechatFile.js

  2. // 监听pages下所有文件的ybf.js生成,如果生成创建wxss,wxml,scss,ybf.js,json文件

  3. function generateFile(event) {


  4. generateJson()

  5. generateRoute()

  6. }

  7. // 向app.json文件内部pages下新增页面路由

  8. function generateJson(pageUrl) {

  9. }

  10. // 向/toulPlugins/routesConfig.js做路由同步

  11. function generateRoute(pageUrl) {}

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

同步app.json的pages

 
   
   
 
  1. // synsPages.js

  2. // 该文件只为了同步app.json下pages对象,为了后期扩展进行路由拦截配置等问题

  3. function syncPage()




godlike

以上是关于vscode+gulp 舒舒服服开发小程序的主要内容,如果未能解决你的问题,请参考以下文章

vscode 开发微信小程序环境配置

vscode开发小程序,如何与小程序开发工具同步代码

VSCode插件开发全攻略代码片段设置自定义欢迎页

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

微信小程序代码片段