小程序目录结构

1.目录结构

前言:小程序包含一个描述整体程序的app和多个描述各自页面的page

一个小程序主体部分由三个文件组件,必须放在项目的根目录,如下:

文件 必需 作用
app.js 小程序逻辑
app.json 小程序公共配置
app.wxss 小程序公共样式表

一个小程序page页面由四个文件组件,分别为:

文件类型 必需 作用
js 页面逻辑
wxml 页面结构
json 页面配置
wxss 页面样式表

注意:为了方便开发者减少配置项,描述页面的四个必须具有相同的路径与文件名。

2.JSON配置

JSON是一种数据格式,并不是编程语言,在小程序中,JSON扮演的静态配置的角色。在项目的根目录有一个app.jsonproject.config.json,此外在每一个page文件中有一个相对于的json文件。

小程序配置app.json

app.json是当前小程序的全局配置,也就是说在app.json中配置的东西会应用在每一个页面中。包括小程序的所有页面路径,界面表现,网络超时时间,底部tab等。

新建的项目里面的app.json配置内容如下:

{
  "pages":[
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "Weixin",
    "navigationBarTextStyle":"black"
  }
}

简单说一下这个配置各个项的含义:

  • pages字段-----用于描述当前小程序所有页面路径,这是为了让微信客户端知道当前你的小程序页面定义在哪个目录。
  • window字段------定义小程序所有页面的顶部背景颜色,文字颜色定义等。
  • 其他配置项细节参考文档微信开发文档配置项

JSON语法

JSON文件都是被包裹在一个大括号中{},通过key-value的方式来表达数据,JSONkey必须包裹在一个双引号中,在实践中,编写JSON的时候,忘了给key值加双引号或者是把双引号写成了单引号是常见的错误。

JSON的值只能是以下几种数据格式,其他任何格式都会触发报错,列如:js中的undefined.

  • 数字,包含浮点数和整数
  • 字符串,需要包裹在双引号中
  • Bool值,true或者false
  • 数组,需要包裹在方括号中[]
  • 对象,需要包裹在大括号中{}
  • Null

注意:需要注意的是JSON文件中无法使用注释,添加注释会引发报错。

wxml

网页编辑采用HTML+CSS+JS这样的组合。其中HTML是用来描述当前这个页面的结构,CSS用来描述页面的样子,JS通常是用来处理这个页面和用户的交互。

WXML和HTML非常相似,WXML由标签,属性等等构成。但是也有很多不一样的地方,我们来一一阐述一下:

1.标签名字有点不一样:

`HTML`常用到的标签是`div,p,span`。开发者在写一个页面的时候可以根据这个基本的标签组合出不一样的组件。

`WXML`小程序常用到的`view,button,text`等等。这些标签就是小程序给开发者包装好的基本能力,我们还提供了地图,视频,音频等等组件能力。[小程序组件](https://developers.weixin.qq.com/miniprogram/dev/component/)

2.多了一些wx:if这样的属性以及{{ }}这样的表达式:

在网页的一般开发流程中,我们通常会通过`JS`操作`DOM`(对应HTML的描述产生的树),以引起界面的变化响应用户的行为。**例如:用户点击某个按钮时,`JS`会记录一些状态到`JS`变量里边,同时通过`DOM API `操控`DOM`的属性或者行为,进而引起界面变化。当项目越来越大时,你的代码会充斥着非常多的界面交互逻辑喝程序的各种状态变量,显然不是一个很好的开发模式,因此就有了`MVVM`的开发模式(如:`React,Vue`),提倡把渲染喝逻辑分离。简单的说就是不要再让`JS` 直接操控`DOM `,`JS`只需要管理状态即可,然后再通过一种模板语法来描述状态和界面结构的关系即可。**

小程序将文本Hello World的字符串显示在界面上。
//WXML这样编写
{{msg}}

//JS这样编写
data:{
    msg:'Hello World'   //初始化定义数据
}

通过{{ }}的语法把一个变量绑定到界面上,称之为“数据绑定”.仅仅通过数据绑定还不够完整的描述状态和界面的关系,还需要if/else,for等控制能力,在小程序里边,这些控制能力都用wx:开头的属性来表达。WXML

WXSS样式

WXSS具有CSS大部分的特性,小程序WXSS也做了一些扩充和修改。

1.新增了尺寸单位:

写`CSS`样式时,开发者需要考虑手机设备的屏幕会有不同的宽度和设备像素比,采用一些技巧来换算一些像素单位。`WXSS`在底层支持新的尺寸单位`rpx`,开发者可以免去换算的烦恼,只要交给小程序底层来换算即可,由于换算采用的浮点数运算,所以运算结果会和预期结果有一点点偏差。

2.提供了全局的样式和局部样式:

与前面的app.json;peag.json的概念相同,你可以写一个app.wxss作为全局样式,会作用于当前小程序的所有页面,局部页面样式page.wxss仅对当前页面生效。

3.此外WXSS仅支持部分css选择器:

更详细参考WXSS

JS逻辑交互:

一个服务仅仅只有界面展示是不够的,还需要和用户做交互:响应用户的点击,获取用户的位置等等,在小程序里边,我们就通过编写JS脚本来处理用户的操作。

{{ msg }}

点击button按钮时,我们希望把界面上msg显示成”Hello World“,于是我们在button上声明一个属性:bindtap,在js文件里边声明了clickMe方法来响应这次点击操作:

Page({
    data:{
        msg:''
    },
    clickMe(){
        this.setData({
            msg:'Hello World'
        })
    }
})

更详细参考WXML事件

此外还可以在JS 调用小程序提供的丰富的API,利用API可以方便的调用微信提供的能力。通过wx.getUserInfo获取微信用户的头像和昵称,最后通过setData把获取到的信息显示到界面上,更详细参考小程序API`

3.util公共函数以及读取

util目录下的util.js文件专用于小程序项目中的公共函数定义,可以将项目开发过程中的公共代码方法提取封装到util.js文件中。

1.util/util.js中定义公共方法:

const toStr = s =>{
  s="你好,"+s;
  return s;
}

module.exports = {
  formatTime,toStr
}

2.在指定页面中的js 中模块化引入utilsjs文件:

//通过require方式引入整个util
//const util=require("../../utils/util")
//通过import方式引入整个util
//import util from "../../utils/util"
//引入指定的模块
import {formatTime} from "../../utils/util"

采用整体引入方式,在调用时请使用实例名,例如:util.formatDate(new Date())

3.利用页面的onLoad事件完成数据赋值展示:

onLoad() {
    this.setData({
      loginTime:formatTime(new Date())
    });
    if (wx.getUserProfile) {
        this.setData({
            canIUseGetUserProfile: true
        })
    }
}

4.小程序配置

全局配置:

小程序根目录下的app.json文件用来对微信小程序进行全局配置,决定页面文件的路径,窗口表现,设置网络超时时间,设置tab等等。更详细参考小程序全局配置

常用的配置选项app.json:

{
  "pages": [
    "pages/index/index",
    "pages/logs/index"
  ],
  "window": {
    "navigationBarTitleText": "Demo"
  },
  "tabBar": {
    "list": [{
      "pagePath": "pages/index/index",
      "text": "首页"
    }, {
      "pagePath": "pages/logs/index",
      "text": "日志"
    }]
  },
  "networkTimeout": {
    "request": 10000,
    "downloadFile": 10000
  },
  "debug": true
}

页面配置:

每一个小程序页面也可以使用同名`.json`文件来对文本页面的窗口表现进行配置,页面中配置会覆盖`app.json`的`window`中相同的配置项。
{
  "navigationBarBackgroundColor": "#ffffff",
  "navigationBarTextStyle": "black",
  "navigationBarTitleText": "微信接口功能演示",
  "backgroundColor": "#eeeeee",
  "backgroundTextStyle": "light"
}

配置小程序/sitemap配置:

微信现在已开发小程序内搜索,开发者可以通过`sitemap.json`配置,或者管理后台页面收录开关来配置其小程序页面是否允许微信索引。当开发者允许微信索引时,微信会通过爬虫的形式,为小程序的页面内容建立索引。当用户的搜索词条触发该索引时,小程序的页面将可能展示在搜索结果中。爬虫访问小程序内页面时,会携带特定的`user-agent:mpcrawler`及[场景值](https://developers.weixin.qq.com/miniprogram/dev/reference/scene-list.html):1129.需要注意的是,若小程序爬虫发现的页面数据和真实用户的呈现不一致,那么该页面将不会进入索引中。

具体配置说明:

  • 页面收录设置:可对整个小程序的索引进行关闭,小程序管理后台-功能-页面内容接入-页面收录开开关;详情
  • sitemap配置:可对特定页面的索引进行关闭;

sitemap配置:

小程序根目录下的sitemap.json文件中用来配置小程序及其页面是否允许被微信索引。完整配置项说明请参考小程序sitemap配置

例如1:

{
  "rules":[{
    "action": "allow",
    "page": "*"
  }]
}

所有页面都会被微信索引(默认情况)

例如2:

{
  "rules":[{
    "action": "disallow",
    "page": "path/to/page"
  }]
}

配置path/to/page页面不被索引,其余页面允许被索引

例如3:

{
  "rules":[{
    "action": "allow",
    "page": "path/to/page"
  }, {
    "action": "disallow",
    "page": "*"
  }]
}

配置path/to/page页面被索引,其余页面不被索引

注:没有sitemap.json则默认所有页面都能被索引

注:{’action':'allow','page':'\*'}是优先级最低的默认规则,末显示指明'disallow’的都默认被索引

如何调试:

当在小程序项目中设置了sitemap的配置文件(默认为sitemap.json)时,便可以在开发者工具控制台上显示当前页面是否被索引的调试信息(最新版本的开发者工具支持索引提示)

//sitemap.json文件

{
  "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
  "rules": [{
  "action": "allow",
  "page": "*"
  }]
}

注意:sitemap的索引提示是默认开启的,如需要关闭sitemap的索引提示,可在小程序项目配置文件project.config.jsonsitemap中配置字段checkSiteMapfalsesitemap文件内容容量大为5120个UTF8字符;

你可能感兴趣的:(小程序目录结构)