日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小程序的项目结构设计

發(fā)布時(shí)間:2025/5/22 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小程序的项目结构设计 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡要認(rèn)識(shí)小程序開發(fā)

其中小程序的構(gòu)成是由.wxml、.wxss、.js、.json四種類型構(gòu)成(下文將簡稱為四類文件)。其開發(fā)方式跟傳統(tǒng)網(wǎng)頁開發(fā)是十分類似的。

  • .wxml模板文件對(duì)應(yīng)為傳統(tǒng)網(wǎng)頁開發(fā)的.html文件,是一個(gè)頁面(組件)的骨架。只不過它里面采用的語法跟傳統(tǒng)的HTML語法有些差異, 比如標(biāo)簽的名稱是微信自己在底層封裝的組件。
  • .wxss樣式文件則對(duì)應(yīng)CSS樣式文件,具有大部分CSS的特性(比如css3的某些偽類特性就沒有,但常見的css3屬性倒是可以用),除此之外還在此基礎(chǔ)上做了新的擴(kuò)展。
  • js一直都是作為跟頁面交互角色,在小程序開發(fā)中也不例外。
    在js中,可以使用微信提供的API。如常見的Page(構(gòu)造器)和Component,還有微信給出的一些特定權(quán)限的API.
  • json則是配置文件,一般是頁面或者組件內(nèi)那一級(jí)的配置文件。

(這里有個(gè)小細(xì)節(jié)可以區(qū)分wxml和wxss區(qū)別,這兩者都是以wx(微信)為開頭,后面的小尾巴是區(qū)別是樣式文件還是模板文件)。

具體的更多細(xì)節(jié)可以去看官網(wǎng)文檔。本文的重心還是在討論項(xiàng)目結(jié)構(gòu)如何安排會(huì)比較整潔合理。

項(xiàng)目結(jié)構(gòu)設(shè)計(jì)思路

每個(gè)小程序項(xiàng)目的根目錄會(huì)有一個(gè)project.config.json的項(xiàng)目配置文件,可以設(shè)置miniprogramRoot屬性指定小程序源碼的目錄, 默認(rèn)為根目錄(/)。意思是說把源代碼放在/src/下的目錄也沒有問題,筆者采用的是源碼在根目錄方式。

首先,小程序規(guī)定:一個(gè)小程序主體部分由三個(gè)文件組成,同時(shí)必須放在項(xiàng)目的根目錄。

  • app.js 需要在里面調(diào)用App()函數(shù),注冊(cè)一個(gè)小程序。
  • app.json 小程序進(jìn)行全局配置,決定頁面文件的路徑、窗口表現(xiàn)、設(shè)置網(wǎng)絡(luò)超時(shí)時(shí)間、設(shè)置多 tab 等。
  • app.wxss 全局樣式,作用于每一個(gè)頁面。但注意的是app.wxss寫的全局樣式不會(huì)影響組件內(nèi)的樣式。
├── app.js ├── app.json ├── app.wxss └── project.config.json

頁面

小程序是由許多頁面組成的,因此我們需要一個(gè)目錄來存放頁面, 我們通常把這個(gè)文件夾命名為/pages/。app.json的pages是一個(gè)數(shù)組,數(shù)組的每一項(xiàng)是用來指定頁面的路徑,框架會(huì)根據(jù)路徑自動(dòng)去尋找相對(duì)位置的四類文件(小程序的代碼構(gòu)成)。數(shù)組第一項(xiàng)為小程序入口頁面。

每個(gè)頁面為單獨(dú)的一個(gè)目錄, 頁面的四類文件使用統(tǒng)一的名稱。這里我們跟官方同步,四類文件跟隨目錄的名稱走:

├── pages │ │── home │ │ ├── home.wxml │ │ ├── home.js │ │ ├── home.json │ │ └── home.wxss │ └── user │ ├── user.wxml │ └── user.js ├── ... └── project.config.json

除此之外,在開發(fā)小程序時(shí),頁面是會(huì)分主要頁面和次要頁面(子頁),子頁通常是一些列表頁詳情頁的東西。理論上只會(huì)有一個(gè)入口能跳的過去那種二級(jí)頁面。如果這樣的子頁一多,然后全都放在了/pages/目錄下,就會(huì)導(dǎo)致目錄列表變得龐大,會(huì)比較難找...

這時(shí)可以考慮換一種方式儲(chǔ)存,在頁面文件夾里再加一個(gè)文件夾, 名為subpage。把子頁放在這個(gè)文件夾內(nèi),這樣層級(jí)關(guān)系就清晰了,缺點(diǎn)就是不適合套太深。或者說一個(gè)產(chǎn)品也不應(yīng)該把頁面藏得太深讓用戶找不到...

├── pages │ └── home │ ├── subpage │ │ └── detail │ │ ├── index.wxml │ │ └── ... │ ├── home.wxml │ └── ... ├── ... └── project.config.json

至于項(xiàng)目簡單一些的話前者會(huì)好一點(diǎn)(子頁命名參照master-description的格式),頁面太過復(fù)雜的話可能會(huì)比較推薦使用后者的方式。

圖片

既然有了頁面,那么頁面必不可免會(huì)需要引用到圖片。圖片大致可以分為業(yè)務(wù)類公共類。一些可以復(fù)用的圖片我們可以放在同一個(gè)地方統(tǒng)一管理。而業(yè)務(wù)類則放在對(duì)應(yīng)的頁面目錄下, 命名格式推薦為dir@description:

├── iamges (公共圖片) │ │── icon │ │ ├── icon@download.png │ │ └── icon@cancel.png | └── ... ├── pages │ └── index │ ├── images │ | └── index@bg.png │ | └── index@video.png │ ├── index.wxml │ ├── index.js │ ├── index.json │ └── index.wxss ├── ... └── project.config.json

但值得注意的是,在js中使用import引入圖片時(shí)不能通過根目錄進(jìn)行查找,而wxml則沒有這種限制。

<!-- 絕對(duì)路徑 --> <images src="/images/icon@download.png" /><!-- 相對(duì)路徑 --> <images src="./images/index@video.png" /> // 會(huì)報(bào)錯(cuò) import iconDownload from '/images/icon@download.png' // 只能使用相對(duì)路徑 import iconDownload from '/../../icon@download.png'

樣式

寫完頁面后自然需要給頁面潤色, 我們可以通過在頁面的.wxss來寫局部樣式,這沒問題。但在我們完成一個(gè)又一個(gè)頁面后,這時(shí)你可能會(huì)發(fā)現(xiàn)有些頁面的樣式重復(fù)性太高了。

因?yàn)橐粋€(gè)成熟的設(shè)計(jì)師,在設(shè)計(jì)每一個(gè)產(chǎn)品時(shí),大多會(huì)有一套設(shè)計(jì)風(fēng)格或者稱之為主題的東西。這些元素大量重復(fù)在各個(gè)頁面中,我們重復(fù)寫這些樣式實(shí)際上代碼是有點(diǎn)冗余的。

{% asset_img button.png 主題按鈕 %}

這時(shí)有經(jīng)驗(yàn)的開發(fā)者很自然就會(huì)想到將重復(fù)性的代碼抽出來,所幸微信提供了@import語句可以導(dǎo)入外聯(lián)樣式表。而這些通用的樣式可以放在/style/目錄下

├── style │ ├── button.wxss │ └── ... ├── ... └── project.config.json

直接在.wxss的頂層引入即可復(fù)用。

@improt '/style/button.wxss';/* other code */

至于是為何不在app.json中設(shè)定全局樣式而單獨(dú)抽出來的原因也是前文所提及的問題————組件中默認(rèn)情況下不受全局樣式影響的,理論上組件也不該受到外部樣式的”無意“的影響。
但app.json中的樣式只需要加載一次就全局可用,外部樣式就不一定了(因?yàn)闆]有實(shí)際的調(diào)研過),而且還需要額外的去做引入的那一步。具體用哪一種方式還是要看具體情況來自己斟酌啦~

還有一些方法,比如使用scss、less之類的預(yù)處理之類的方案,也是可以,只不過超出了本文的討論范圍,不展開講。

組件

組件對(duì)于熟悉模塊化開發(fā)的同學(xué)自然不陌生,小程序基礎(chǔ)庫版本 1.6.3 就開始支持自定義組件了,至今為止也不用擔(dān)心兼容性的問題了。從筆者角度來看看法,小程序的組件可以分為全局組件和局部組件。

全局性是指那種封裝了登錄、彈框、動(dòng)畫組件等等之類的組件,局部的大多是減輕一個(gè)頁面內(nèi)的復(fù)雜度,通過模塊"搭積木"的方式來組成一個(gè)頁面。即使某個(gè)功能砍了也能對(duì)頁面減少牽連。

我們習(xí)慣于將全局性的東西放在源碼的根目錄上,因此會(huì)在根目錄上創(chuàng)建/components文件夾,里面存放全局性的組件。
其中全局性的組件有不少會(huì)有同等類型的組件,因?yàn)榭梢栽龠M(jìn)一步的分類,如動(dòng)畫類組件存放為一個(gè)文件夾內(nèi)。
再利用編輯器的文件名排序的特性,可以加上@提前組件集合。

組件下的四類文件按照componment/index的方式命名與page區(qū)分。

├── componments (公共組件) │ │── anima │ │ ├── coin │ | | ├── index.js │ | | └── ... │ │ └── liquid │ | └── ... | └── ... ├── pages │ └── home │ ├── componments │ | └── goods │ | ├── index.wxml │ | └── ... │ ├── home.wxml │ ├── home.js │ ├── home.json │ └── home.wxss ├── ... └── project.config.json

utils

在原生小程序開發(fā)中,一般在源碼的根目錄下,都會(huì)有一個(gè)utils文件夾,專門來干雜七雜八的臟話累活。其中包含工具類函數(shù)、API的管理、配置信息等。

├── utils (工具集) │ │── api │ │ └── ... | ├── ... (其他工具類) | ├── config.js | └── local.config.js (本地配置,git忽略) ├── ... └── project.config.json

分包

當(dāng)小程序的資源大小超過了2M時(shí),進(jìn)行預(yù)覽調(diào)試時(shí)就會(huì)報(bào)文件過大的錯(cuò)誤,這時(shí)你可能就需要進(jìn)行分包,將資源分開加載。小程序文檔給出的目錄結(jié)構(gòu)是:

├── app.js ├── app.json ├── app.wxss ├── packageA │ └── pages │ ├── cat │ └── dog ├── packageB │ └── pages │ ├── apple │ └── banana ├── pages │ ├── index │ └── user └── utils

但經(jīng)過我們?cè)陧?xiàng)目中嘗試,我們發(fā)現(xiàn)通過編輯器的字符串排序后,會(huì)破壞目錄結(jié)構(gòu)的清晰度,所以推薦將分包放置到一個(gè)文件夾內(nèi)。

├── subpackages (分包) │ │── news │ │ └── ... | └── store │ └── ... ├── ... └── project.config.json

結(jié)束

最后的一個(gè)小程序項(xiàng)目主體結(jié)構(gòu)大致是:

├── components (公共組件目錄) │?? ├── @anima (動(dòng)畫組件) │ └── ... ├── images(公共圖片) │ └── icon │ ├── icon@download.png │ └── icon@cancel.png ├── pages(主包目錄) │ └── home (app.json 設(shè)置的入口頁) │ ├── home.wxml │ ├── home.js │ ├── home.json │ └── home.wxss ├── style(公用樣式目錄) ├── subpackages(分包目錄) │ │── news | └── store ├── utils(公共模塊,工具類) │ ├── config.js(項(xiàng)目配置) │?? └── local.config.js (本地配置,git忽略) ├── .editorconfig ├── .gitignore ├── app.js ├── app.json ├── app.wxss ├── project.config.json └── README.md

以上是從原生小程序開發(fā)的角度來對(duì)項(xiàng)目結(jié)構(gòu)的設(shè)計(jì)進(jìn)行一個(gè)思路總結(jié),沒有過多的講更深入的東西。下一期想整理一下關(guān)于API封裝和管理,歡迎指導(dǎo)~

總結(jié)

以上是生活随笔為你收集整理的小程序的项目结构设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 韩日一级片| 久久国产片 | 天天操夜夜添 | 成人乱码一区二区三区av | 91看片国产 | 新呦u视频一区二区 | 久久精品99国产精品日本 | 韩国美女主播跳舞 | 在线免费观看h片 | 琪琪午夜伦理影院7777 | 另类一区| 天天看黄色片 | 五月激情综合 | 亚州av综合色区无码一区 | 寡妇高潮一级视频免费看 | 欧美天天视频 | 国产熟女精品视频 | 偷拍精品一区二区三区 | 草草影院最新地址 | 狠狠操亚洲 | 美国黄色一级毛片 | 中文字幕第80页 | 九九av| 在线观看免费观看 | 中文字幕国产在线 | 日本wwww色| 国产在线观看黄色 | 国产精品zjzjzj在线观看 | 性久久久久久久 | 日日骚视频 | 少妇高潮惨叫久久久久久 | 无码久久av一区二区三区 | 人妻人人澡人人添人人爽 | 欧美日韩精品久久 | 亚洲第一伊人 | 中文字幕精品在线观看 | 少妇精品一区二区三区 | 久久久久久久久久久久久久久久久久久 | 亚洲国产网站 | 海角国产乱辈乱精品视频 | 五十路六十路七十路熟婆 | 麻豆传媒网址 | 国产美女免费观看 | 在线色图| 日韩黄色网络 | 香蕉视频在线视频 | 国产女人高潮时对白 | 吃奶在线观看 | 久久精品屋 | 日本不卡一二 | 在线视频啪 | 久久精品噜噜噜成人88aⅴ | 青青青国产精品一区二区 | 精品人妻一区二区三区日产乱码 | 欧美一区二区性久久久 | 色呦呦在线观看视频 | 日本一区不卡 | 黄色一级图片 | 国产成人一区二区三区小说 | 最近2018年手机中文字幕版 | 粗大的内捧猛烈进出视频 | 一级片啪啪 | 国产18p| 中文字幕Av日韩精品 | 欧美日日夜夜 | 国产性生活视频 | 被各种性器调教到哭vk | 国产av电影一区二区三区 | 在线观看黄色av | 一区二区三区四区欧美 | 一区二区三区四区五区av | 在线观看亚洲网站 | 日韩美女在线 | 西西人体做爰大胆gogo | 1000部啪啪未满十八勿入超污 | 久久久国产成人一区二区三区 | 欧美三级手机在线观看 | 亚洲精品一线 | 国产精品国产三级国产aⅴ浪潮 | 中文字幕第一页在线播放 | 亚洲最新av网址 | 亚洲激情图片区 | 成人影片在线免费观看 | 欧美一区三区二区在线观看 | 欧美日韩高清一区二区 国产亚洲免费看 | 久草免费在线视频 | www在线看片 | 黄色大片儿 | 看污网站| 亚洲欧洲日本一区二区三区 | 午夜伦视频| 99资源网| 精产国品一二三区 | 国产精品区一区二 | 国产精品99久久久久久久女警 | 久久久噜噜噜久久中文字幕色伊伊 | 色窝网| 成人免费视频网站在线观看 | av有码在线|