搜尋
首頁微信小程式小程式開發微信小程式 在Chrome瀏覽器上運作以及WebStorm的使用

這篇文章主要介紹了微信小程式在Chrome瀏覽器上運行以及WebStorm的使用的相關資料,需要的朋友可以參考下

“微信小程式”的開發框架體驗起來,還不錯——自備了UI框架。但問題是他的IDE,表現起來相當的糟糕──其實主要是因為,我當時買WebStorm License買了好多年。所以,我覺得他的IDE真不如我這個付費好用。

而且,作為一個擁護自由和開源的 「GitHub 中國區首席Markdown程式設計師」。微信在「微信小程式」引導Web開向封閉,我們再也不能愉快地分享我們的程式碼了。

如果我們放任下去,未來的Web世界令人堪憂。

好了,廢話說完了:

文章太長不想看,可以直接看Demo哈哈:

GitHub:  https://github.com/phodal/weapp -webdemo 

預覽: https://github.com/phodal/weapp-webdemo 

真實世界下的MINA三基本元素

#“微信小程式」的背後運作的是一個名為MINA框架。在之前的幾篇文章裡,我們介紹得差不多了。現在讓我們來介紹pipeline:

Transform wxml和wxss

當我們修改完WXML、WXSS的時候,我們需要重新編譯專案才能在瀏覽器上看到效果。這時候後台就會執行一些transform動作:

1.wcc來轉換wxml為一個genrateFun,執行這個方法將會得到一個virtual dom
2.wxss就會轉換wxss為css--這一點有待商榷。

wcc和wxss,可以從vendor目錄下取得到,在「微信web開發者工具」下敲入help,你就會得到下面的東東:

微信小程序 在Chrome浏览器上运行以及WebStorm的使用

執行openVendor(),你就會得到上面的wcss、wxss、WAService.js、WAWebview.js四個檔案了。

Transform js檔案

對js檔案來說,則是一個拼裝的過程,如下是我們的app.js檔案:

App({
onLaunch: function () { }
})

它在轉換後會變成:

define("app.js", function(require, module){var window={Math:Math}/*兼容babel*/,location,document,navigator,self,localStorage,history,Caches;
  App({
   onLaunch: function () {

   }
  })
});
require("app.js");

我假裝你已經知道這是什麼了,反正我也不想、也不會解釋了~~。同理於:

define("pages/index/index.js", function(require, module){var window={Math:Math}/*兼容babel*/,location,document,navigator,self,localStorage,history,Caches;
  Page({
   data: {
    text: initData
   }
  });
 require("pages/index/index.js");

至於它是如何replace或apend到html中,我就不作解釋了。

MINA如何運作?

為了執行一個Page,我們需要有一個virtual dom,也就是用wcc轉換後的函數,如:

 

/*v0.7cc_20160919*/
  var $gwxc
  var $gaic={}
  $gwx=function(path,global){
   function _(a,b){b&&a.children.push(b);}
   function _n(tag){$gwxc++;if($gwxc>=16000){throw 'enough, dom limit exceeded, you don\'t do stupid things, do you?'};return {tag:tag.substr(0,3)=='wx-'?tag:'wx-'+tag,attr:{},children:[]}}
   function _s(scope,env,key){return typeof(scope[key])!='undefined'?scope[key]:env[key]}
   function _wl(tname){console.warn('template `' + tname + '` is being call recursively, will be stop.')}
   function _ai(i,p,e,me){var x=_grp(p,e,me);if(x)i.push(x);else{console.warn('path `'+p+'` not found from `'+me+'`')}}
   function _grp(p,e,me){if(p[0]!=&#39;/&#39;){var mepart=me.split(&#39;/&#39;);mepart.pop();var ppart=p.split(&#39;/&#39;);for(var i=0;i<ppart.length;i++){if( ppart[i]==&#39;..&#39;)mepart.pop();else if(!ppart[i])continue;else mepart.push(ppart[i]);}p=mepart.join(&#39;/&#39;);}if(me[0]==&#39;.&#39;&&p[0]==&#39;/&#39;)p=&#39;.&#39;+p;if(e[p])return p;if(e[p+&#39;.wxml&#39;])return p+&#39;.wxml&#39;;}
//以下省略好多字。

#然後在我們的html中加一個script,如

document.dispatchEvent(new CustomEvent("generateFuncReady", {
  detail: {
   generateFunc: $gwx(&#39;index.wxml&#39;)
  }
 }))

#就會湊發這個事件了。我簡單的拆分了WXWebview.js得到了幾個功能元件:

  1. define.js,這裡就是定義AMD模組化的地方

  2. exparser.js,用於轉換WXML標籤到HTML標籤

  3. exparser-behvaior.js,定義不同標籤的一些行為

  4. mobile.js,應該是一個事件庫,好像我並不在乎。

  5. page.js,核心程式碼,也就是Page、App的定義所在。

  6. report.js,你所說的一切都能夠用作為你的呈堂證供。

  7. virtual_dom.js,一個virtual dom實作結合wcc使用,裡面應該還有component.css,也可能叫weui

  8. wa -wx.js,定義微信各種API以及WebView和Native的地方,和下面的WX有衝突。

  9. wx.js,同上,但略有不同。

  10. wxJSBridge.js,Weixin JS Bridge

#於是,我就用上面的元件來定義不同的位置好了。當我們觸發自訂的generateFuncReady事件時,將由virtual_dom.js來接管這次Render:

document.addEventListener("generateFuncReady", function (e) {
 var generateFunc = e.detail.generateFunc;
 wx.onAppDataChange && generateFunc && wx.onAppDataChange(function (e) {
  var i = generateFunc((0, d.getData)());
  if (i.tag = "body", e.options && e.options.firstRender){
   e.ext && ("undefined" != typeof e.ext.webviewId && (window.__webviewId__ = e.ext.webviewId), "undefined" != typeof e.ext.downloadDomain && (window.__downloadDomain__ = e.ext.downloadDomain)), v = f(i, !0), b = v.render(), b.replaceDocumentElement(document.body), setTimeout(function () {
    wx.publishPageEvent(p, {}), r("firstRenderTime", n, Date.now()), wx.initReady && wx.initReady()
   }, 0);
  } else {
   var o = f(i, !1), a = v.diff(o);
   a.apply(b), v = o, document.dispatchEvent(new CustomEvent("pageReRender", {}));
  }
 })
})

因此,這裡就是負責DOM初始化的地方了,這裡得到的Dom結果是這樣的:

<wx-view class="btn-area">
 <wx-view class="body-view">
  <wx-text><span style="display:none;"></span><span></span></wx-text>
  <wx-button>add line</wx-button>
  <wx-button>remove line</wx-button>
 </wx-view>
</wx-view>

而我們寫的wxml是這樣的:

<view class="btn-area">
 <view class="body-view">
 <text>{{text}}</text>
 <button bindtap="add">add line</button>
 <button bindtap="remove">remove line</button>
 </view>
</view>

#很明顯view會被轉換為wx-view,text會被轉換為wx-text等等,以此類推。這個轉換是在virtual dom.js中呼叫的,而呼叫的方法就是exparser。

遺憾的是我現在困在 data初始化上面了~~,這裡面有兩套不同的事件系統,有一些困擾。其中有一個是:WeixinJSBridge、還有一個是app engine中的事件系統,兩個好像不能互調。 。 。

使用WebStorm開發

在瀏覽器上運作之前,我們需要簡單的mock一些方法,如:

  1. window.webkit.messageHandlers.invokeHandler.postMessage

  2. window.webkit.messageHandlers.publishHandler.postMessage

  3. WeixinJSCore.publishHandler

  4. WeixinJSCore..invokeHandler

    ##

然后把 config.json中的一些内容变成__wxConfig,如:

__wxConfig = {
 "debug": true,
 "pages": ["index"],
 "window": {
  "backgroundTextStyle": "light",
  "navigationBarBackgroundColor": "#fff",
  "navigationBarTitleText": "WeChat",
  "navigationBarTextStyle": "black"
 },
 "projectConfig": {

 },
 "appserviceConfig": {

 },
 "appname": "fdfafafafafafafa",
 "appid": "touristappid",
 "apphash": 2107567080,
 "isTourist": true,
 "userInfo": {}
}

如这里我们的appname是哈哈哈哈哈哈哈——我家在福建。

然后在我们的html中引入各个js文件,啦啦。

我们还需要一个自动化的glup脚本来watch wxml和wxss的修改,然后编译,如:

exec(&#39;./vendor/wcc -d &#39; + inputPath + &#39; > &#39; + outputFileName, function(err, stdout, stderr) {
   console.log(stdout);
   console.log(stderr);
});

说了这么多,你还不如去看代码好了:

GitHub: https://github.com/phodal/weapp-webdemo 

预览:http://weapp.phodal.com/

通过此文,希望能帮助大家,谢谢大家对本站的支持!

更多微信小程序 在Chrome浏览器上运行以及WebStorm的使用相关文章请关注PHP中文网!


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能