「2.0」一个人开发一个App,小程序从0到1,文件剖析
不知你是不是见到“文件剖析”这4个大字,才点进来看一看的?如果真是的话,那我可以坦诚、真心、负责任地告诉你:你上当了,你上了贼船啦,如果你现在想跳的话,还来得及,反正茫茫大海中,鲨鱼正缺搞程序的人。说你上当了,是因为我根本就剖析不了。我顶多只能做到分析。
2.1 配置文件分析
赶快打开微信开发工具,快速进到项目窗口中。展开pages,展开index,展开logs,展开utils,展开一切可以展开的。唯有如此,方能见到整个项目的全貌。
项目中,工程配置文件project.config.json,可用来配置appid、项目名称、调试基础库,还有云开发的文件夹路径,至于其他的,几乎不会做任何改动。
项目中,页面索引文件sitemap.json,可配置页面是否可被索引(搜索), action为allow表示同意,disallow表示不同意;page为*表示所有页面,pages/index
/index指定某个页面。
小程序项目中,除了配置文件外,还有应用文件和页面文件。

2.2 页面文件分析
一个小程序应用,由index,logs等多个页面组成。一个页面,由负责配置的json,布局的wxml,样式的wxss和业务逻辑的js组成。
这是一个关于1+1+1+1=4的故事,故事从配置文件json开始。
2.2.1 json文件
json文件可配置窗口顶部导航栏的背景色、标题、标题颜色和引入第3方组件。第3方组件,唯有在json文件中引入,方可在wxml文件中使用。
{
"usingComponents": {
"mp-cells": "../../components/cells/cells",
"mp-cell": "../../components/cell/cell"
},
"navigationBarTitleText": "关于",
"navigationBarTextStyle": "black"
}
2.2.2 wxml文件
wxml文件,对手机界面进行布局。布局可从左到右,上到下;可从右到左,下到上;可左青龙,右白虎,上图片,下按钮。
上图片,下按钮是我要实现功能,而左青龙,右白虎是留给你的作业,记得按时完成哦。完成之后,仔细观察一下代码,你就会发现有个莫名其妙的container,莫名其妙地出现在那里。不要急,存在即是合理,只是还没说到wxss文件而已。
<view class="container">
<image src="../../images/long.png" style="width: 750rpx;height: 450rpx"></image>
<button>确定</button>
</view>
2.2.3 wxss文件
wxss文件,是wxml的好基友,一直站在wxml背后,承担着化妆师(样式)的工作。这就是,每个成功的wxml,背后都会有一个wxss的来由。正是有了wxss的支持,wxml才可以放心、大胆地布局,大胆地布局天下。
好看的皮囊千篇一律,有趣的灵魂万里挑一,光有布局,光有一张靓丽的外表,不足以成就大业。若想成就大业,得靠js文件来实现,实现业务逻辑。
.container {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
}
2.2.4 js文件
js文件,实现业务逻辑并把结果显示在wxml中,昭告天下。如果只是实现一个简单任务,像计算1+1=2这种,那单个js应该是没问题的,只是理想很丰满,现实很骨感,一个小程序应用,往往要实现的功能远远不止于如此。
为了提高开发效率,可把一些通用的功能,放在一个通用的js文件里,并放置在utils下。等页面中的js文件要使用时,用require引入便可。
既然有js可共用,那是否有wxss可供共用?有的,app.wxss文件便是。
const util = require('../../utils/util.js')
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
2.3 app.wxss文件
app.wxss文件,为整个应用的样式配置文件。在这里配置的样式,可供所有页面共用,而且不用任何操作。真好,微信产品经理,总算做了一件让程序员省心的事了。
一说到省心,你就开心,一开心,便忘乎所以,忘记还有app.js和app.json未被提及。这两个家伙,可是很重要的角色。
app.js,是一名有着一夫当关万夫莫开本事的土匪。若要进到页面,得先过app.js这一关,此路是他开此树是他栽,要想从此过,脱下裤子来。
就是说,全局的内容,全局变量和全局的业务逻辑,在这里实现。至于全局的配置,请移步到app.json文件中。
//app.js
App({
onLaunch: function () {
// 展示本地存储能力
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
},
globalData: {
userInfo: null
}
})
2.4 app.json文件
app.json文件,对整个应用进行配置的配置文件。在这,可配置统一风格的窗口(window)风格,包括页面的标题栏背景色,标题(这个不太可能),标题颜色;
可配置且必须配置的页面路径(pages);可配置全局切换标签,可配置定位等权限声明和授权提示信息,可引入第3方插件。
可,可,可,渴就喝水去。
{
"pages": [
"pages/index/index",
"pages/logs/logs"
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle": "black"
},
"permission": {
"scope.userLocation": {
"desc": "请授予位置服务权限,以便更好的吃饭"
}
},
"tabBar": {
"borderStyle": "black",
"backgroundColor": "#ffffff",
"color": "#1b1b1b",
"selectedColor": "#2b2b2b",
"list": [
{
"iconPath": "images/about.png",
"selectedIconPath": "images/about_p.png",
"pagePath": "pages/about/index",
"text": "关于"
},
{
"iconPath": "images/my.png",
"selectedIconPath": "images/my_p.png",
"pagePath": "pages/my/index",
"text": "我的"
}
]
},
"sitemapLocation": "sitemap.json"
}
等等,听我讲了大半天,是不是感觉少了点什么,没错,少了给我发红包了。少了讲开发工具生成的源代码了,少了怼微信产品经理了。
好吧,那我就再怼一句,微信的小程序的产品经理,你们生成的代码,我看不懂,也不想看,下一节,我就统统把它们删掉。
「2.0」一个人开发一个App,小程序从0到1,文件剖析的更多相关文章
- 「1.0」一个人开发一个App,小程序从0到1,起航了
古有,秦.齐.楚.赵.魏.韩.燕七国争雄:今有,微信.QQ.百度.支付宝.钉钉.头条.抖音七台争霸.古有,白起.李牧.王翦.孙膑.庞涓.赵奢.廉颇驰骋疆场:今有程序员1,程序员2,程序员3…编写代码. ...
- 「4.0」一个人开发一个App,小程序从0到1,布局
一提到布局这个词,我总是索索发抖,不是因为天冷,而是因为布局的目标实在太宏大.古代想雄霸天下的王,就喜欢布局这个,布局那个,结果硬生生把自己的国家给布局没了.至于是哪个君王,我倒可以非常认真,非常坦诚 ...
- 如何快速地开发一个微信小程序
如何快速地开发一个微信小程序呢?我觉得作为初学者,最好能有一个模板,然后改这个模板. 同样作为初学者,刚开始的时候我有下面的几个问题,后来通过问同学,我弄清楚了. 微信小程序可以连接MySQL或者Sq ...
- 开发一个微信小程序教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可. 2.注册成功后进入首页,在 小程序发布流程->小程序 ...
- 开发一个微信小程序项目教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...
- 开发一个微信小程序实例教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...
- 如何开发一个微信小程序
一.概述 特点:对商家来说,小程序的开发成本低(有丰富的组件.api等).运营成本低(有数据日志等).稳定.互动流畅,便于分享.传播(基本微信平台的大量用户).对用户来说,扫码即可获取服务,随 ...
- 搭建Spring开发环境并编写第一个Spring小程序
搭建Spring开发环境并编写第一个Spring小程序 2015-05-27 0个评论 来源:茕夜 收藏 我要投稿 一.前面,我写了一篇Spring框架的基础知识文章,里面没 ...
- 开发一个 app 有多难?
171 个回答 默认排序 道衍天机 有事情的加微信1293190838找我 1,150 人赞同了该回答 ----------------------------------------------- ...
随机推荐
- 深度优先遍历 and 广度优先遍历
深度优先遍历 and 广度优先遍历 遍历在前端的应用场景不多,多数是处理DOM节点数或者 深拷贝.下面笔者以深拷贝为例,简单说明一些这两种遍历.
- JSON怎样添加注释
今天在写一个程序的时候发现了一个问题,在json文件中添加注释之后,程序就出现bug了 于是,去搜了一下这个问题的相关解释,在这里和大家分享一下: JSON为什么不能添加注释? 这位外国友人给出的解释 ...
- linux ioctl 系统调用预定义的命令
尽管 ioctl 系统调用最常用来作用于设备, 内核能识别几个命令. 注意这些命令, 当用 到你的设备时, 在你自己的文件操作被调用之前被解码. 因此, 如果你选择相同的号给一 个你的 ioctl 命 ...
- 判断是否是ie浏览器或者edge浏览器,引入特定的css
判断是否是ie浏览器或者edge浏览器,引入特定的css 我本来要用ie浏览器专有的条件注释语句来引入,但是发现都没有效果,网上有说ie10之后的浏览器取消了条件语句,反正我是只要是IE都没有试出效果 ...
- 与正则有关的JS方法结合其在项目中的应用
与正则有关的JS方法结合其在项目中的应用 前言 最近项目中用到正则匹配比较多,因此打算深入理解和总结下各个与正则有关的方法,再结合在项目中使用的情况.与正则有关的JS方法共有7个,分别是RegExp对 ...
- 浅析 Nginx 网络事件
Nginx 是一个事件驱动的框架,所谓事件主要指的是网络事件,Nginx 每个网络连接会对应两个网络事件,一个读事件一个写事件.在深入了解 Nginx 各种原理及在极端场景下的一些错误场景处理时,需要 ...
- basedir的介绍
os内置dirname方法就是文件目录的往上找一级 #得到当前文件名或者路径 if __name__ == "__main__": print(__file__) #这是os的一个 ...
- Spark RDD的弹性到底指什么
RDD(Resiliennt Distributed Datasets)抽象弹性分布式数据集对于Spark来说的弹性计算到底提现在什么地方? 自动进行内存和磁盘数据这两种存储方式的切换 Spark 可 ...
- 利用Python实现高度定制专属RSS
前言 本文转载自个人博客网站,欢迎来访订阅.本篇属于定制RSS系列终极一弹,是三种方式中自由度最高.定制化最强的,也需要一定的编程能力.附上前两篇链接:1.利用Feed43为网站自制RSS源:2.如何 ...
- $Poj3714/AcWing\ Raid$ 分治/平面最近点对
$AcWing$ $Sol$ 平面最近点对板子题,注意要求的是两种不同的点之间的距离. $Code$ #include<bits/stdc++.h> #define il inline # ...