故事是这样的

产品小姐姐:“我要做一堆小程序,一周上线一到两个没问题吧”
码畜小哥哥:“你他喵是不是傻,做那么多干什么”
产品小姐姐:“蹭些流量呀,用户量多了就可以考虑转化流量给公司的 App”
码畜小哥哥:“fuck 好的”

码畜小哥开始架构

  • 小程序杂,放一个项目方便管理
  • 小程序多,代码要能够复用
  • 团队开发,代码风格要统一

码畜小哥开始建项目

这是单个小程序的基本目录结构,没问题

当一个项目有多个小程序的时候,好像也没问题

当多个小程序都用到同一个组件 com3 时,小哥发现代码没法复用,需要复制黏贴

思考了一下,那么把组件目录移到外面,这样不就可以复用了吗

感觉很好,小哥这时在微信开发者工具打开 demo1,发现报错了

原来小程序是以当前项目作为根目录,components 目录已经不在 demo1 目录范围内,所以是引用不到的

小哥想到了 Webpack

1. 整理目录

  • apps/:存放全部小程序
  • build/:存放构建脚本
  • common/:存放公共方法
  • components/:存放公共组件
  • styles/:存放公共样式
  • templates/:存放公共模板

大概长这样

2. 编写构建脚本

package.json

script: {"dev": "webpack --config build/webpack.config.js"
}

build/webpack.config.js

思路就是利用 CopyWebpackPlugin 同步指定的文件到小程序目录下

const CopyWebpackPlugin = require('copy-webpack-plugin')
const utils = require('./utils')// 获取 apps 目录下的小程序并指定公共文件目录命名
function copyToApps(dir) {let r = []utils.exec(`cd ${utils.resolve('apps')} && ls`).split('\n').map(app => {r.push({from: utils.resolve(dir),to: utils.resolve(`apps/${app}/_${dir}`)})})return r
}module.exports = {watch: true,// 监听入口文件,保存便会刷新entry: utils.resolve('index.js'),output: {path: utils.resolve('.tmp'),filename: 'bundle.js'},plugins: [// 同步指定的公共文件到所有小程序目录下new CopyWebpackPlugin([...copyToApps('styles'),...copyToApps('common'),...copyToApps('templates'),...copyToApps('components')])]
}

3. 启动本地开发

npm run dev

现在公用的代码已经自动同步到小程序目录下,以下划线开头,当改动公共代码也会自动同步给小程序调用

调用方式长这样

import utils from './_common/utils'
import com3 from './_components/com3'
@import './_styles/index.wxss';
<import src="./_templates/index.wxml" />

代码风格校验

package.json

script: {"lint": "eslint apps/"
}

.eslintrc.js

module.exports = {extends: 'standard',// 将小程序特有的全局变量排除下globals: {Page: true,Component: true,App: true,getApp: true,wx: true},rules: {'space-before-function-paren': ['error', 'never'],'no-unused-vars': ['error',{// 小程序还没支持 ES7,这个是用来兼容 async/awaitvarsIgnorePattern: 'regeneratorRuntime'}]}
}

然后借助 husky 在每次 git commit 前执行校验

script: {"precommit": "npm run lint"
},devDependencies: {"husky": "^0.14.3"
}

清理

最后小哥还加了个清理命令, 便于重新生成公共代码

package.json

script: {"clean": "node build/clean.js"
}

build/clean.js

const rimraf = require('rimraf')
const utils = require('./utils')function log(dir) {console.log(`cleaning ${dir}`)
}rimraf(utils.resolve('.tmp'), () => log('.tmp'))utils.exec(`cd ${utils.resolve('apps')} && ls`).split('\n').map(app => {;[`${app}/_styles`,`${app}/_common`,`${app}/_templates`,`${app}/_components`].map(m => {rimraf(utils.resolve(`apps/${m}`), () => log(m))})})

码畜小哥心满意足

“可以少加班了”

利用 Webpack 实现小程序多项目管理相关推荐

  1. c语言京东购物系统,仿京东商城: 自主使用微信小程序实现的网上商城案例(包括前端和后台),利用了微信小程序的云数据库...

    仿京东网上商城 介绍 自主使用微信小程序实现的仿京东网上商城案例(包括前端和后台),数据库利用了微信小程序的云数据库 软件架构 软件架构说明 数据库表设计 本系统数据库主要用了微信小程序自带的云数据库 ...

  2. 微信小程序开发05 研发加速:使用 Webpack 提升小程序研发效率

    你好,我是俊鹏.从今天开始,我会用四节课的时间带你学习微信小程序在工程化方面的实践方案. 小程序发展到今天已经成为很多产品的重要流量入口,随着用户量的增加,功能不断复杂化,小程序的体量不断增长,原始的 ...

  3. 家政公司小程序开发,家政服务如何利用多端小程序,实现转型拓客

    文/江苏微网 家政服务小程序开发,如何帮助家政服务机构抢占市场? 小程序当前在各个行业的很多场景被广泛使用,为用户和商家企业也提供了便捷.家政服务行业的小程序开发,也成为了很多家政公司的首选. 家政服 ...

  4. stm32利用mqtt与小程序通信

    stm32利用mqtt与小程序通信 stm32连接服务器端 小程序连接服务器 本项目实现的功能如下:通过stm32连接esp8266,然后利用mqtt协议连接到服务器,同时小程序端也连接到服务器,通过 ...

  5. 利用watch在小程序中实现全局状态共享

    问题 在之前开发微信小程序的时候,获取用户信息.openid还有地理位置这些信息的时候,都是采用Promise的方式异步获取,但是这样的话在页面和App.js中都获取就可能造成请求重复的问题. 比如为 ...

  6. 前端如何获取联通积分_怎么利用定制的小程序来获取流量

    从标题可以看出,今天要讲的主内容分为两块,一个是定制小程序,另一个就是流量. 这里就做简单的介绍,什么是小程序,小程序是由腾讯在2017年1月1日正式推出的一种新型软件框架主要是展示在微信上,基于微信 ...

  7. javaweb简单的登录增删改查系统_利用python操作小程序云数据库实现简单的增删改查!

    不止python,你可以利用任何语言那实现通过http请求来操作你自己的小程序云数据库了 背景 也是在最近吧,小程序更新了云开发 HTTP API 文档,提供了小程序外访问云开发资源的能力,使用 HT ...

  8. python删除数据库的数据完整代码_利用python操作小程序云数据库实现简单的增删改查...

    不止python,你可以利用任何语言那实现通过http请求来操作你自己的小程序云数据库了 背景 也是在最近吧,小程序更新了云开发 HTTP API 文档,提供了小程序外访问云开发资源的能力,使用 HT ...

  9. 后退一步 小程序_微信小程序:如何利用navigateBack退出小程序

    在Android开发时,我们可以使用finish()或者结束进程等手段达到退出app的效果,但是,微信小程序则没有提供退出小程序的api,必须用户点击系统返回键或者点击顶部小程序固定的的退出按钮... ...

最新文章

  1. ThinkPHP5 清除runtime缓存文件
  2. 全视曲面屏设计,三星S8又一次走在了行业创新的最前沿
  3. springboot 打印slf4_SpringBoot 整合 slf4j 日志打印
  4. Theano 中文文档 0.9 - 5.1 Ubuntu安装说明
  5. 首次超过苹果!华为高端智能手机Q1国内市场出货量占48%
  6. win7安装证书时无响应的解决办法
  7. 3.2 LSTM、GRU RNN概述
  8. Final Cut Pro 10.6 for Mac(fcpx视频剪辑)
  9. java编程思想学习笔记——第2章 一切都是对象
  10. url中文传参乱码问题
  11. 办公自动化和计算机应用哪个好,高级办公自动化和计算机二级VF哪个更好?两个都考有必要吗?...
  12. 敏捷开发项目管理软件
  13. Java 语言被很多人抱怨语法繁琐、开发效率低、体系繁杂而笨重,为什么还有这么强的生命力,尤其是在企_-Chaz-_新浪博客
  14. flask中的应用工厂
  15. ShardingSphere 5.2.1 发布|新增系统库、强制分片路由、一致性校验
  16. mysql查询的金额保留两位小数_mysql查询结果单位换算后保留两位小数
  17. xampp is currently only availably as 32 bit applic
  18. C. Ehab and Path-etic MEXs-Codeforces Round #628 (Div. 2)
  19. 正则表达式--匹配简体繁体中文姓名,还有少数民族的·号
  20. 输入一个整数,判断它是奇数还是偶数。 若n是奇数,则输出“This is an odd number.” 若n是偶数,则输出“This is a even number.”

热门文章

  1. 如何免费注册使用虚拟主机和二级域名建站
  2. jquery.autocomplete自动补齐和自定义格式
  3. Python学习(六)模块
  4. pap与chap协议
  5. textarea在IE中和FF下不同的效果
  6. 浅析.Net 在 winform及wpf中涉及界面交互的多线程类的封装
  7. 服务器控件的 ID, ClientID 和 UniqueID 属性
  8. 基于 Lerna 管理 packages 的 Monorepo 项目最佳实践
  9. 洛谷 P4549 【模板】裴蜀定理
  10. ROS入门(八) make_plan的Server连接