用過原生,用過 wepy
,用過 mp-vue
,可是都不是很是滿意,原生的痛點是文件太多,wepy
和 mp-vue
的問題見 mpvue和wepy問題總結,最後不得不和同事一塊兒作了一個超輕量的小程序單文件解析器 mp-parser
,在貼合原生語法的同時解決掉文件太多的痛點。並配套研發了腳手架 mp-parser-cli
,提供了不少通用能力好比字體壓縮、代碼壓縮、通用組件、http & cookie
封裝等。javascript
mp-parser
的核心就是單文件解析以及熱更新,下面爲一個語法示例(demo.vue
),標籤內的全部語法皆爲原生語法。css
<!-- config 標籤下的內容會被解析到 .json 文件中 -->
<config>
{
usingComponents: {}
}
</config>
<!-- template 標籤下的內容會被解析到 .wxml 文件中 -->
<template>
<navigation title="自定義導航欄"></navigation>
</template>
<!-- script 標籤下的內容會被解析到 .js 文件中 -->
<script> Page({}) </script>
<!-- style 標籤下的內容會被解析到 .wxss 文件中,支持 sass 語法 -->
<style lang="scss"> </style>
複製代碼
mp-parser
腳手架提供了很是多的通用能力,詳細文檔見 github地址。html
http
請求將 http
請求 promise
化,簡化了請求語法,且會自動攜帶 cookie
vue
Page({
onLoad() {
// get
this.$http.get('url', {params: ''}).then((res) => {}).catch((err) => {});
// post
this.$http.post('url', {params: ''}).then((res) => {}).catch((err) => {});
}
})
複製代碼
咱們提供了很是多的通用組件,好比經常使用有java
navigation
drag-card
count-down
ellipsis-text
fixed-inputter
image-cropper
range-slider
video-recorder
sideslipping
Page({
onLoad() {
// { title, needHideLoading }
this.$showSuccess('操做成功', false);
// { title, content, needHideLoading}
this.$showError('操做失敗', '操做失敗,請稍後重試', false);
this.$showLoading('數據加載中...');
this.$hideLoading();
}
})
複製代碼
字體配置完後執行如下命令,具體配置教程見 字體壓縮配置教程node
npm run fontCompression
複製代碼
# 安裝腳手架
npm install -g mp-parser-cli
# 新建項目
mp-parser-cli-init <project_name>
# 安裝依賴
cd <project_name>
npm install
# 運行
npm run dev
# 打開開發者工具,選擇dist目錄,查看效果
複製代碼
參考 html-minifier
的思路,作了一個適合小程序的 wxml-minifier
,核心思路:解析文檔流,處理標籤、屬性,移除註釋、多餘空格、換行等。git
基於 cssnano
,替換了少部分不適用的邏輯,用來壓縮 wxss
代碼。github
使用 uglify-es
壓縮 js
代碼npm
commander
解讀命令行download-git-repo
拉取 github
模板倉庫到本地vue-template-compiler
解析單文件node-sass
解析 sass
內容chokidar
監聽文件變化,動態解析變更文件、處理靜態資源