在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

小程序開發之3大問題與處理方法

小程序開發之3大問題與處理方法

更新時間:2025-09-30 文章作者:未知 信息來源:網絡 閱讀次數:

微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。

在微信公布小程序的文檔和開發工具后,脈沖軟件在第一時間進行了學習和體驗,我們發現微信小程序的技術架構和開發體驗讓我們非常失望。

由于微信小程序的運行環境并不是一個標準的瀏覽器環境,而且微信的封裝工作并不完善,所以我們以往開發中的很多經驗并不適用。

這并非簡單的開發習慣不適應,更重要的是我們的開發流程、規范將不適用。

微信小程序開發第一宗罪: 無法調用NPM包

雖然微信小程序開發工具打包時實現了require函數加載依賴,但并不是完整的CommonJS依賴管理。因為require函數僅僅能夠加載項目中的JS文件,而且必須嚴格定義JS文件路徑,路徑不支持CommonJS的路徑風格。例如如下加載方式都將出錯:

require('lodash');
require('lodash/map');
require('./foo');

在微信小程序開發工具中,我們必須對應寫為如下格式:

require('node_modules/lodash/lodash.js');
require('node_modules/lodash/map.js');
require('./foo.js');

雖然我們可以像上面代碼一樣加載node_modules目錄中的庫,但是實際運行時卻發生了:

調試工具的Network選項卡中,我們看到運行時加載了1000多個文件,總數據量1.8MB,而我們僅僅是在代碼中加載了一個lodash庫而已!這是因為微信小程序開發工具會將所有項目下的js文件視為項目文件,并進行打包。而實際開發中,我們需要安裝很多的NPM擴展庫,而這些擴展庫中有大量的不需要打包的文件,例如lodash中有上千文件,而我們只需要用到其中的非常少的一部分。

另外,在開發中,我們往往需要安裝babal、eslient、webpack、grunt等待開發工具,微信小程序開發工具會一視同仁將這些工具的源碼也進行打包......實測開發者工具將崩潰!開發者將崩潰!我崩潰!

所以不支持NPM包的原因,是微信開發者工具不支持CommonJS標準,不支持CommonJS標準的原因,是微信開發者工具想當然地認為項目目錄下的js文件一定是項目文件,所以只實現了簡單的require函數,想當然的原因是。。。

微信小程序開發第二宗罪: 無法使用Babel轉碼

無法使用Babel轉碼的原因其實仍然歸結于無法加載NPM庫。但是后果將十分嚴重。因為你將不能再安全使用ES6/7特性,你將無法使用async/await函數,你將和無盡的callback做斗爭,你該怎樣描述自己?回調地獄中的苦逼程序員?

如果你看到這里不明白Babel為何物,那么祝賀你,因為不曾見過天堂就不知何為地獄,你無須為不支持ES6/7而煩惱。但一旦你的大腦支持了ES6/7,用過了Babel,你就回不去了,像我一樣,無Babel不編碼。

微信小程序開發第三宗罪: 無法重用組件

其實微信小程序開發是并非完全不能重用組件,比如WXML語法中支持import和 include。但是那僅僅是視圖模板可重用,并非組件可重用,因為我們認為組件在應當包含視圖和邏輯。

WXML其實是基于可重用的組件,但是不允許我們自定義組件。如果你有React經驗,你就會明白我的意思。

例如,你的小程序是個電商APP,項目中有兩個頁面中同時包含了商品列表組件,比如某分類下商品列表和搜索結果列表,我們知道這兩個列表其實僅僅是參數不同而已。但是在小程序開發中,你只能將列表的模板抽象出來,不能將邏輯抽象出來,所以你就需要在兩個頁面上都實現一遍列表組件的控制邏輯,比如刷新、加載更多。。。

我們的實踐

只吐槽、管殺不管埋是不道德的,既然發現了微信小程序開發中的各種弊端,我們脈沖軟件在開發之中總結出了一套流程和工具,專為解決上述三個問題,并免費發布到了開源社區,這就是Labrador。接下來我們一起來嘗試一下我們脈沖軟件的開發體驗。

安裝Labrador

通過命令 npm install -g labrador-cli 全局安裝Labrador控制行工具。

初始化項目

通過如下命令新建一個Labrador項目:

mkdir demo
cd demo
npm init
labrador init

項目初始化完成后,該目錄是這個樣子的:

圖中的src是我們的源碼目錄,node_modules是NPM包目錄,dist是目標輸出目錄。請在開發者工具中新建一個項目,并設置路徑到dist目錄,請勿設置為demo目錄!使用WebStorm或Sublime打開demo目錄,開發過程中,我們使用WebStorm或Sublime修改src目錄下的源碼,請勿直接修改dist目錄中的文件,因為dist目錄是通過labrador命令生成的。

在demo目錄中運行 labrador build 命令編譯項目,該命令會將src目錄下的文件一一處理并生成dist目錄下對應的文件。我們也可以運行 labrador watch 命令監控src目錄下的文件變化,這樣就不用每次修改后手動運行編譯命令。

加載NPM包

我們以lodash包為例,在src/app.js中鍵入代碼 const _ = require('lodash'); 編譯后,我們看到dist目錄下的文件是這樣的:

我們看到dist目錄下有一個npm/lodash目錄,該目錄下只有一個lodash.js文件,那么在微信web開發者工具中打包預覽,lodash的庫將只有這個文件被加載。

這一切是怎么發生的?

我們看一下dist/app.js的源碼,發現源碼中const _ = require('lodash'); 被編譯為 var _ = require('./npm/lodash/lodash.js'); 然后labrador命令將node_modules/lodash/lodash.js 文件復制到了 dist/npm/lodash/lodash.js 。這就是通過labrador可以調用NPM包的原理。

重要的是,只有真正用到的js文件才被labrador命令加入到項目目錄中。這樣一個小小的改進象征著我們的小程序可以便捷調用NPM倉庫中海量的擴展庫!

Babel轉碼

在初始化的示例代碼src/app.js中的內容是這樣的:

圖中timer和getUserInfo屬性都為async函數,函數體內使用await調用異步操作。labrador 庫對微信API進行了封裝,使用 const wx = require('labrador'); 覆蓋默認的全局變量wx; 封裝后的wx對象提供的異步方法返回的都是Promise異步對象,結合async/await函數徹底終結callback,將異步代碼同步寫,輕松逃離回調地獄!

但目前async/await函數是不被瀏覽器支持的,我們需要使用babel對其轉碼,labrador編譯命令已經內置了babel轉碼,轉碼后的代碼可以查看dist/app.js,內容過長,不再張貼。

重用組件

重用組件最需要解決的問題是組件的邏輯代碼怎樣重用。在實例代碼中有一個src/components目錄,用來存放項目內的可重用組件,其結構是這樣的:

子目錄src/components/list中存放著一個可重用的組件。list.js / list.less / list.xml 分別對應微信小程序的 js / wxss / wxml 文件。JS為控件的邏輯層,其代碼如下:

文件導出一個List類,這個組件類擁有像Page一樣的生命周期函數onLoad, onReady, onShow, onHide, onUnload 以及setData函數。

LESS文件對應微信的WXSS文件,因為微信小程序實現的限制,LESS中無法使用連級選擇語法,但是可以定義變量,方便開發。

XML文件對應微信的WXML文件,是組件視圖描述文件,list.xml內容為:

文件中導出一個名為list的template。
組件不但可以存放在src/components目錄內,還可以單獨做成NPM包,這樣就可以輕松做到跨項目間的組件共享。

組件定義完成后,接下來是在頁面中調用,在 src/pages/index/index.js 中有如下代碼:

代碼中首先引入了labrador庫替換全局的默認wx對象,并使用labrador.createPage方法代替全局的Page函數聲明頁面。然后加載List組件類,在頁面聲明配置中,增加了components屬性,并將List組件類實例化傳入。labrador.createPage方法是對Page方法的一層封裝,目的是在頁面初始化時和組件對象進行關聯。

在 src/pages/index/index.less 中加入代碼 @import 'list' 即可調用list組件的樣式,如果在src/components/list中找不到list.less,那么編譯命令將在NPM包中尋找 node_modules/list/index.less 。

在 src/pages/index/index.xml 中加入代碼 <component key="list"/> 即可調用list組件的模板文件,component 是Labrador自定義的組件,編譯后對應生成 import 和 template。如果在src/components/list中找不到list.xml,那么編譯命令將在NPM包中尋找 node_modules/list/index.xml

具體的體驗還需要你親自動手才行,文章到此結束,謝謝!

【相關推薦】

1. 微信小程序完整源碼

2. 微信小程序demo:仿網易云音樂

以上就是小程序開發之三大問題和解決方法的詳細內容,更多請關注php中文網其它相關文章!


小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 无码内射中文字幕岛国片| 国产l精品国产亚洲区久久| 97在线国产视频| 最新视频 - x88av| 五月天视频在线观看| 亚洲少妇久久久| 亚洲成人手机在线观看| 成人一区二区av| 好吊妞无缓冲视频观看| 国产成人无码一二三区视频| 国产91xxx| 国产免费人做人爱午夜视频| 国产综合中文字幕| 免费裸体美女网站| 成人av一级片| 在线观看日本www| 成人免费毛片网| 奇米视频888| 最新中文字幕久久| 好男人www社区| 欧美视频在线观看视频| heyzo国产| 日本精品免费视频| 另类小说色综合| 黄色片网址在线观看| 一区二区三区一级片| 黄色动漫在线免费看| 日本天堂免费a| 日本在线一二三区| 亚洲免费看av| 国产亚洲综合视频| 久久久无码中文字幕久...| 成人免费观看cn| 黄网站欧美内射| 伊人再见免费在线观看高清版 | 久久99中文字幕| 日日摸日日碰夜夜爽无码| www.污网站| 国产精品亚洲天堂| 看一级黄色录像| 人妻av无码专区| 97成人在线免费视频| 亚洲人精品午夜射精日韩| 欧美一区二区中文字幕| 久久国产亚洲精品无码| 色综合久久久久无码专区| 欧洲黄色一级视频| 日韩肉感妇bbwbbwbbw| 免费在线激情视频| 一级黄色大片儿| 好色先生视频污| 国产精品一线二线三线| 熟女人妇 成熟妇女系列视频| 日本www.色| 老汉色影院首页| 中国丰满人妻videoshd| 久久精品香蕉视频| 一级黄色在线播放| 日韩精品一区在线视频| 国产精品久久久毛片| 嫩草影院中文字幕| 九九久久久久久| 日本a√在线观看| 欧美爱爱视频免费看| 超碰中文字幕在线观看| 青青青在线视频免费观看| 久久天天东北熟女毛茸茸| 日本成人在线免费视频| 欧美一区二区激情| 国产一级黄色录像片| 樱花草www在线| 激情婷婷综合网| 六月丁香婷婷激情| 国产欧美高清在线| 人妻少妇精品久久| 和岳每晚弄的高潮嗷嗷叫视频| 亚洲 欧美 日韩系列| 久久婷婷国产91天堂综合精品| 天美一区二区三区| 久久综合久久久久| 国产精品久久..4399| 免费男同深夜夜行网站| 成人黄色一区二区| 韩国黄色一级大片| 中文字幕日韩久久| 免费国产黄色网址| 中文字幕av专区| 欧洲精品一区二区三区久久| 免费毛片小视频| 黄色一级免费大片| 男人天堂a在线| 国产自偷自偷免费一区 | 日本阿v视频在线观看| 99精品人妻少妇一区二区| 日本黄网站免费| www婷婷av久久久影片| 搡女人真爽免费午夜网站| 久久久99精品视频| 久久av秘一区二区三区| 2022亚洲天堂| 青青草综合视频| 久久精品视频16| 无码 制服 丝袜 国产 另类| 在线视频日韩欧美| 成人午夜激情av| 久久久一二三四| 精品一卡二卡三卡| 亚洲人成色77777| 日本中文字幕二区| 一本色道无码道dvd在线观看| 久久久九九九热| 日本丰满少妇黄大片在线观看| 在线不卡一区二区三区| 久久6免费视频| 麻豆md0077饥渴少妇| 99re8这里只有精品| 亚洲a级黄色片| 日本中文字幕观看| 日韩人妻精品一区二区三区| 粉色视频免费看| 日韩视频 中文字幕| 国产成人精品无码播放| 天天综合成人网| 很污的网站在线观看| 国产精彩免费视频| 亚洲av毛片在线观看| 青青青在线观看视频| 国产手机免费视频| 欧美黑人又粗又大又爽免费| 亚洲欧美日本一区二区三区| 超碰97免费观看| 中国丰满人妻videoshd| 日本黄网站色大片免费观看| 91精品91久久久中77777老牛| 大香煮伊手机一区| 777一区二区| 激情小视频网站| 国产探花在线观看视频| 国产精品一区二区小说| 少妇性饥渴无码a区免费| 夜夜添无码一区二区三区| 三日本三级少妇三级99| av观看免费在线| 91好吊色国产欧美日韩在线| 精品少妇人欧美激情在线观看| www.色.com| 天堂av手机在线| 国产91在线亚洲| 热久久最新网址| 屁屁影院ccyy国产第一页| 青草网在线观看| 日韩在线xxx| 91九色国产ts另类人妖| 天天爱天天做天天操| www.成年人视频| 丰满爆乳一区二区三区| 男人插女人下面免费视频| 成人在线看视频| 免费成人进口网站| 女人喷潮完整视频| 99久re热视频精品98| 男人天堂网站在线| 在线观看免费成人av| 天天爱天天做天天操| 日韩视频免费在线播放| 欧美人与动牲交xxxxbbbb| 欧洲熟妇精品视频| 久久这里只有精品18| 国产性生交xxxxx免费| 欧美国产日韩在线视频| 久久精品国产精品亚洲色婷婷| 九一免费在线观看| 一级在线免费视频| 国产va亚洲va在线va| 四虎成人在线播放| 天堂av在线网站| 激情综合网俺也去| 久久久久久久久久久久久久国产| wwwwww欧美| 路边理发店露脸熟妇泻火| 三级在线免费看| 黄色av网址在线播放| av在线观看地址| 中文字幕在线综合| 爱情岛论坛成人| 午夜剧场高清版免费观看| 中文字幕日韩综合| 中文字幕精品一区二区三区在线| 五月婷婷六月合| 欧美三级午夜理伦三级老人| 无码粉嫩虎白一线天在线观看| 国产一区 在线播放| 波多野结衣家庭教师视频| 午夜免费福利在线| 中文字幕免费高| 日韩人妻精品无码一区二区三区| 日本女优爱爱视频| 99re8这里只有精品| 中文字幕乱码人妻综合二区三区| 欧美色图另类小说|