미니앱 오픈소스 프로젝트
kbone #
kbone 프로젝트 (GitHub 오픈소스)는 미니앱을 위한 브라우저 호환 레이어를 만들어서 웹을 위해 작성된 코드가 변경 없이 미니앱으로 동작하는 것을 목표로 해요. Vue, React, 그리고 Preact) 등의 템플릿으로 쉽게 시작할 수 있어요.
새 프로젝트는 kbone-cli
도구로 시작해요. 생성 마법사가 어떤 프레임워크를 사용할 것인지 물어봐요. 아래는 Preact 데모예요. 아래 코드에서, mp
명령어로 미니앱을 빌드하고, web
명령어로 웹앱을 빌드하고, build
명령어로 Production 웹앱을 빌드할 수 있어요.
npx kbone-cli init my-app
cd my-app
npm run mp
npm run web
npm run build
아래 코드로 간단한 카운터 컴포넌트를 만들어서 동일한 형태로 미니앱과 웹앱으로 만들 수 있어요. DOM의 구조로 파악할 때, 미니앱의 오버헤드가 상당해요.
import {h, Component} from 'preact';
import './index.css';
class Counter extends Component {
state = {count: 1};
sub = () => {
this.setState((prevState) => {
return {count: --prevState.count};
});
};
add = () => {
this.setState((prevState) => {
return {count: ++prevState.count};
});
};
clickHandle = () => {
if ('undefined' != typeof wx && wx.getSystemInfoSync) {
wx.navigateTo({
url: '../log/index?id=1',
});
} else {
location.href = 'log.html';
}
};
render({}, {count}) {
return (
<div>
<button onClick={this.sub}>-</button>
<span>{count}</span>
<button onClick={this.add}>+</button>
<div onClick={this.clickHandle}>跳转</div>
</div>
);
}
}
export default Counter;

<button>
elements.
kbone-ui #
kbone-ui 프로젝트 (GitHub 오픈소스) 는 Vue.js와 미니앱으로 동시에 개발할 수 있는 UI 프레임워크예요. kbone-ui 컴포넌트는 WeChat의 내장 미니앱 컴포넌트 (Components 참고)와 유사해요. 데모를 확인해서 사용할 수 있는 컴포넌트를 확인해보세요.

WeUI #
WeUI는 WeChat의 시각적 경험과 동일하게 구성된 기본적인 스타일 라이브러리예요. WeChat 공식 팀에서 WeChat의 웹페이지와 미니앱의 경험을 동일하게 만들기 위해 디자인을 다듬었어요. button
, cell
, dialog
, progress
, toast
, article
, actionsheet
, 그리고 icon
등의 컴포넌트를 제공해요.
또한 서로 다른 WeUI 버번들이 존재해요.
WXSS로 스타일링되는 WeChat 미니앱을 위한 weui-wxss도 있고 (스타일링 참고),
웹앱을 위한 weui.js, WeChat 리액트 컴포넌트를 위한 react-weui도 있어요.

Omi #
Omi는 크로스 프레임워크를 지향하는 프론트엔드 프레임워크예요. (GitHub 오픈소스. 웹 컴포넌트, JSX, 버추얼 돔, 함수형 수타일, 옵저버와 프록시를 하나의 프레임워크로 모아 적은 용량으로 고성능을 내요. 이 프레임워크의 목표는 개발자들이 하나의 컴포넌트를 Omi, React, Preact, Vue.js, Angular 같은 여러 플랫폼에서 사용할 수 있게 하는거예요. Omi 컴포넌트를 작성하는 것은 직관적이고 어떤 보일러플레이트도 필요 없어요.
import {render, WeElement, define} from 'omi';
define(
'my-counter',
class extends WeElement {
data = {
count: 1,
};
static css = `
span{
color: red;
}`;
sub = () => {
this.data.count--;
this.update();
};
add = () => {
this.data.count++;
this.update();
};
render() {
return (
<div>
<button onClick={this.sub}>-</button>
<span>{this.data.count}</span>
<button onClick={this.add}>+</button>
</div>
);
}
},
);
render(<my-counter />, 'body');
Omiu #
Omiu는 Omi에 기반한 크로스 프레임워크 UI 컴포넌트 라이브러리예요. (GitHub 오픈소스). 일반적인 웹 컴포넌트의 커스텀된 엘리먼트들을 생성해요.

WePY #
WePY는 미니앱들을 컴포넌트로 분리하여 개발할 수 있는 프레임워크예요. 선-컴파일(Pre-compilation)을 통해 개발자들은 자신이 선호하는 개발 스타일로 미니앱을 개발할 수 있어요. WePY 프레임워크의 구체적인 최적화와 Promise와 비동기 함수들의 도입은 미니앱 개발을 훨씬 쉽고 효율적으로 만들었어요. 동시에, WePY는 성장하고 있는 프레임워크로, Vue.js를 비롯한 최적화된 프론트엔드 도구에서 디자인 콘셉트 등을 차용했어요.
<style lang="less">
@color: #4d926f;
.num {
color: @color;
}
</style>
<template>
<div class="container">
<div class="num" @tap="num++">{{num}}</div>
<custom-component></custom-component>
<vendor-component></vendor-component>
<div>{{text}}</div>
<input v-model="text" />
</div>
</template>
<config>
{ usingComponents: { customComponent: '@/components/customComponent',
vendorComponent: 'module:vendorComponent' } }
</config>
<script>
import wepy from '@wepy/core';
wepy.page({
data: {
num: 0,
text: 'Hello World',
},
});
</script>

vConsole #
vConsole 프로젝트는 모바일 웹페이지를 위한 가볍고 확장성 있는 프론트엔드 개발자 도구예요. 디버거와 같은 개발자 도구를 미니앱에 곧바로 주입할 수 있어요. 데모를 통해 가능성을 확인하세요. vConsole은 로그, 시스템, 네트워크, 구성 요소, 그리고 저장소 등의 탭을 제공해요.

weweb #
weweb 프로젝트(GitHub 오픈소스)는 "WeChat와 호환 가능하다"는 Hera 미니앱 프레임워크의 프론트엔드 프레임워크예요. 이를 통해 미니앱의 방식으로 웹앱을 프로그래밍할 수 있어요. 문서에서 언급된 바에 따르면, 미니앱이 있을 경우 이를 곧바로 브라우저에서 실행할 수 있다고 해요. 제 실험에 따르면 현재 존재하는 미니앱들에는 안정적으로 동작하지 않았는데, 아마도 프로젝트가 최근의 WeChat 업데이트를 반영하지 않아서 그런 듯 해요.

지원되는 WeChat API를 보여주는 Hera 미니앱 프레임워크 문서.

감사의 말 #
이 글은 Joe Medley, Kayce Basques, Milica Mihajlija, Alan Kent, 그리고 Keith Gu에 의해 리뷰되었어요.