微信小程序差很少已經推出了兩年半的時間,對於尚未入坑或剛準備動手的開發同窗,本文檔將嘗試在幾分鐘內讓你快速的瞭解其基本開發生態,雖嫌走馬觀花零零碎碎,但應該可對接下來的開發作出合理的抉擇。javascript
秉持乾溼分離的原則,本文將組織成如下結構:php
I. 優勢
II. 資源和生態
III. 小程序和雲開發點滴
IV. 小程序和開發者工具的基本原理
V. 《組隊點餐寶》雲開發 DEMO 小程序
VI. 擴展閱讀和參考資料
複製代碼
大部份內容很是初級,大佬請輕拍或繞行,另外...html
HTML5
< 微信小程序
< RN/Weex
< 原生
微信小程序
< HTML5
< RN/Weex
< 原生
微信公衆平臺 mp.weixin.qq.com前端
小程序開發文檔 developers.weixin.qq.com/miniprogram…vue
在原有的公衆號網頁調試工具的基礎上,集成了公衆號網頁調試和小程序調試兩種開發模式java
許多複雜的業務場景,須要經過網頁形式來提供服務,這時須要用到:node
堪稱 ActionScript3 復刻版的 API 設計:webpack
微信小程序必須在官方的開發者工具圖形界面中開發、調試、上傳,這限制了預處理樣式、轉譯圖片等前端開發經常使用能力,也沒法使用 npm 引入第三方包或使用常見的開發框架git
一種最簡單的思路是開發一些用 npm scripts 執行 node.js 腳本,完成上述官方工具中不方便的工做,此時通常的目錄結構是在「官方規範代碼」外面包裹一層,如:
├ mock/
├ assets/
├ dist/ # 這裏存放開發者工具中的標準代碼
│ ├ ...
│ └ pages/index/
│ ├ index.js
│ ├ index.json
│ ├ index.wxml
│ └ index.wxss # 由外部 less/sass 實時生成,不手動編輯
├ # 也包含了轉換後的外部路徑或編碼後的圖片
├ styles/
├ nodemon.json
├ package.json
└ dev.js # 一些 watch、轉譯等工做
複製代碼
這種方式雖然「簡陋」,但因爲基本上仍是用的原生開發,因此不用擔憂官方升級後(仍是至關頻繁的)不匹配等問題。
不過畢竟 bigger 略低,能力提高頗有限,更多平時前端項目中積累的代碼也沒法直接複用;
藉助 AST 轉譯的能力,市面上更多成熟的解決方案提供了更好的選擇:
一套遵循 React 語法規範的多端統一開發框架
騰訊開發的「讓小程序支持組件化開發的框架」
美團出品的「一個使用 Vue.js 開發小程序的前端框架」
Vue.js
開發體驗Vuex
數據管理方案:方便構建複雜應用webpack
構建機制:自定義構建策略、開發階段 hotReloadVue.js
命令行工具 vue-cli
快速初始化項目WeUI
wxParse
微信小程序富文本解析組件,支持 HTML 及 Markdown 轉 WXML 可視化
小程序發佈之初並不支持直接內嵌 h5 頁面,這讓不少躍躍欲試直接用既有公衆號頁面拓展入口的商家和開發者怨聲載道。
不到一年後,開始支持 <web-view>
組件,但也特別聲明瞭我的類型與海外類型的小程序暫不支持使用。
這使得一些嵌入網頁和構建富文本的工做變得困難,也讓 wxParse
組件至今仍然富有意義。
miniprogram-simulate
新出現的小程序自定義組件測試工具集
因爲小程序有獨特的運行環境,因此對於小程序自定義組件的單元測試一直沒有比較優雅的解決方案;
此工具集就是爲了解決這一痛點,將本來小程序自定義組件雙線程分離運行的機制調整成單線程模擬運行,利用 dom 環境進行渲染,藉此來完成整個自定義組件樹的搭建。
運行此工具集須要依賴 js 運行環境和 dom 環境,所以能夠採用 jsdom + nodejs(如 jest),也能夠採用真實瀏覽器環境(如 karma)
const path = require('path')
const expect = require('chai').expect
describe('component', () => {
it ('should run successfully', () => {
// 直接使用全局的 simulate
const id = simulate.load(path.resolve(__dirname, '../src/component/index'))
const comp = simulate.render(id, {prop: 'index.test.properties'})
comp.attach(document.body) // 掛載在 body 下面
expect(
simulate.match(
comp.dom,
'<wx-view class="main--index">index.test.properties</wx-view>'
)
).to.equal(true)
})
})
複製代碼
AppID
每一個小程序對應一個,在開發階段開始前從開放平臺申請
AppSecret
code
由小程序端調用 wx.login(),從微信服務器獲取的一個帶有時效性的憑證
openid
也就是用戶 id,能夠用這個 id 來區分不一樣的微信用戶
unionid
用戶在微信開放平臺的惟一標識符
session_key
微信服務器給開發者服務器頒發的身份憑證,開發者能夠用 session_key 請求微信服務器其餘接口來獲取一些其餘信息
SessionID
開發者服務器和開發者的小程序之間的會話密鑰,通常稱爲 SessionID
OpenSDK
開發者的第三方 APP 須要喚起小程序等操做時,須要集成對應版本的開發工具包
JS-SDK
微信公衆平臺面向網頁開發者提供的基於微信內的網頁開發工具包
wx-server-sdk
雲開發時,在「雲函數」中引用的 npm 包,
wx-server-sdk
與小程序端的雲 API 以一樣的風格提供了數據庫、存儲和雲函數的 API
開發者可使用雲開發開發微信小程序、小遊戲,無需搭建服務器,便可使用雲端能力
雲開發弱化了後端和運維概念,無需搭建服務器,使用平臺提供的 API 進行核心業務開發,便可實現快速上線和迭代。
目前提供三大基礎能力支持:
不一樣於以前章節中獲取登陸態的複雜,雲開發時極度的簡化了這一過程。
好比有一個雲函數 test
:
// cloudfunction/test/index.js
const cloud = require('wx-server-sdk')
exports.main = (event, context) => {
// 這裏獲取到的 openId、 appId 和 unionId 是可信的
const {OPENID, APPID, UNIONID} = cloud.getWXContext()
return {
OPENID,
APPID,
UNIONID,
}
}
複製代碼
上傳並部署該雲函數後,可在小程序中測試調用:
wx.cloud.callFunction({
name: 'test',
complete: res => {
console.log('callFunction test result: ', res)
}
})
複製代碼
會在調試器看到輸出的 res
爲以下結構的對象:
{
"APPID": "xxx",
"OPENID": "yyy",
"UNIONID": "zzz" // 僅在知足 unionId 獲取條件時返回
}
複製代碼
分類 | 配額種類 | 額度 |
---|---|---|
存儲 | 容量 | 5 GB |
雲函數 | 調用次數 | 20 萬次 / 月 |
數據庫 | 容量 | 2 GB |
運行環境 | 邏輯層 | 渲染層 |
---|---|---|
iOS | JavaScriptCore | WKWebView |
安卓 | X5 JSCore | X5瀏覽器 |
小程序開發者工具 | NWJS | Chrome WebView |
小程序中的 JavaScript 同瀏覽器或 NodeJS 中的 JavaScript 都是不相同的:
JSCore 是 WebKit 默認內嵌的單線程 JS 引擎,進行詞法分析、語法分析以及解釋執行等工做
結合官網的介紹,並基於開源的 github.com/cytle/wecha… 項目,一窺相關實現:
在微信開發者工具上 WebView 是一個 chrome 中的 <webview />
標籤。與<iframe />
標籤不一樣的是,<webview/>
標籤是採用獨立的線程運行的。
<webview/>
加載的連接是http://127.0.0.1:9973/appservice/appservice
複製代碼
<webview/>
提供打開 Chrome Devtools 調試界面的接口,使得開發者工具具有對小程序的邏輯層和渲染層進行調試的能力午餐吃什麼?每到此時老是和同事同窗意見不統一?來試試這個小程序~
固然選好地方後也能夠看看源碼,對雲函數、雲數據庫的用法有個直觀印象:
搜索 fewelife 關注公衆號
轉載請註明出處