wepy_wepy- - CSDN
  • wepy快速入门

    2019-05-13 10:12:01
    Github地址 wepy官网:https://tencent.github.io/wepy/index.html 安装 wepy 命令行工具 npm install wepy-cli -g 在开发目录生成开发DEMO ...npm install -g wepy-cli //全局安装或更新WePY命令行工...

    Github地址

    wepy官网:https://tencent.github.io/wepy/index.html

    安装 wepy 命令行工具

    npm install wepy-cli -g
    

    在开发目录生成开发DEMO

    wepy new myproject
    

    开发实时编译

    wepy build --watch
    
    npm install -g wepy-cli  //全局安装或更新WePY命令行工具(wepy脚手架): wepy-cli
    wepy -v //查看wepy-cli版本
    wepy init standard <projectName> //新建wepy小程序项目,1.7.0之前的版本使用:wepy new myproject
    wepy list //查看项目模板
    cd <projectName> //切换至项目目录
    npm  install //安装依赖
    wepy build --watch //开启实时编译
    

    在这里插入图片描述
    WePY项目的目录结构

    ├── dist                   小程序运行代码目录(该目录由WePY的build指令自动编译生成,请不要直接修改该目录下的文件)
    ├── node_modules           
    ├── src                    代码编写的目录(该目录为使用WePY后的开发目录)
    |   ├── components         WePY组件目录(组件不属于完整页面,仅供完整页面或其他组件引用)
    |   |   ├── com_a.wpy      可复用的WePY组件a
    |   |   └── com_b.wpy      可复用的WePY组件b
    |   ├── pages              WePY页面目录(属于完整页面)
    |   |   ├── index.wpy      index页面(经build后,会在dist目录下的pages目录生成index.js、index.json、index.wxml和index.wxss文件)
    |   |   └── other.wpy      other页面(经build后,会在dist目录下的pages目录生成other.js、other.json、other.wxml和other.wxss文件)
    |   └── app.wpy            小程序配置项(全局数据、样式、声明钩子等;经build后,会在dist目录下生成app.js、app.json和app.wxss文件)
    └── package.json           项目的package配置
    

    在这里插入图片描述

    project.config.json文件内容如下:

    {
      "description": "project description",
      "setting": {
        "urlCheck": true,
        "es6": false,
        "postcss": false,
        "minified": false
      },
      "compileType": "miniprogram",
      "appid": "touristappid",
      "projectname": "Project name",
      "miniprogramRoot": "./dist"
    }
    

    es6: 对应关闭ES6转ES5选项,关闭。 重要:未关闭会运行报错。

    postcss: 对应关闭上传代码时样式自动补全选项,关闭。 重要:某些情况下漏掉此项也会运行报错。

    minified: 对应关闭代码压缩上传选项,关闭。重要:开启后,会导致真机computed, props.sync 等等属性失效。

    urlCheck: 对应不检查安全域名选项,开启。 如果已配置好安全域名则建议关闭。

    展开全文
  • 使用 wepy 开发的小程序Demo
  • 核心内容:  1、解析小程序目录结构,4种文件类型  2、自适应rpx与弹性布局flex  3、view、image等常用组件应用 ...  4、剖析配置文件,全局配置与页面配置 ... 13、详细讲解监听小程序分享转发功能
  • wepy的安装步骤

    2018-06-27 22:21:26
    1、使用官方文档的安装步骤,打开黑窗(window+R)...npm install wepy-cli -g 2)wepy init standard myproject 这是有内容的文件夹(有各种示例),可以建空的文件夹 wepy --help wepy list 根据提示更改数据 ...

    1、使用官方文档的安装步骤,打开黑窗(window+R)或者使用git运行,

        1).安装在全局,以便哪里用哪里取npm install wepy-cli -g

        2)wepy init standard myproject 这是有内容的文件夹(有各种示例),可以建空的文件夹

            wepy --help

            wepy list 根据提示更改数据

            空文件夹 wepy init empty name(自己定义的名称)

       3)切换目录

        cd 至neme(自己定义的名称)或者 myproject;

        4)安装依赖包

        npm install(可以写成 npm i);

        5) 监听数据(实时更新,打包数据)

    2、如果官方的不能安装

        1)先试一下运行(淘宝镜像),可以先不运行下面的命令,直接运行第二步骤

    $ npm install -g cnpm --registry=https://registry.npm.taobao.org

        2)再安装

            cnpm install wepy-cli -g (前面加一个c)

        3)后边的命令按官方的运行,但是要在npm 前加c cnpm 只要有npm 都要加

        

            

    展开全文
  • wepy框架入门

    2019-05-18 11:44:58
    安装 wepy 命令行工具。 npm install wepy-cli -g 在开发目录生成开发DEMO。 wepy new myproject 开发实时编译。 wepy build --watch 项目目录结构 dist node_modules src components com_a.wpy com...

    安装 wepy 命令行工具。

    npm install wepy-cli -g
    

    在开发目录生成开发DEMO。

    wepy new myproject
    

    开发实时编译。

    wepy build --watch
    

    项目目录结构

        dist
        node_modules
        src
            components
                com_a.wpy
                com_b.wpy
            pages
                index.wpy
                page2.wpy
            app.wpy
        package.json
    

    使用微信开发者工具新建项目,本地开发选择dist目录。
    微信开发者工具 --> 项目 --> 关闭ES6转ES5。
    本地项目根目录运行wepy build --watch,开启实时编译。

    官方DEMO代码:

    //index.js
    //获取应用实例
    var app = getApp()
    Page({
      data: {
        motto: 'Hello World',
        userInfo: {}
      },
      //事件处理函数
      bindViewTap: function() {
        console.log('button clicked')
      },
      onLoad: function () {
        console.log('onLoad')
      }
    })
    

    基于wepy的实现:

    import wepy from 'wepy';
    
    export default class Index extends wepy.page {
    
        data = {
            motto: 'Hello World',
            userInfo: {}
        };
        methods = {
            bindViewTap () {
                console.log('button clicked');
            }
        };
        onLoad() {
            console.log('onLoad');
        };
    }
    

    wepy支持组件化开发
    组件示例代码:

    // index.wpy
    <template>
        <view>
            <component id="pannel" path="pannel"></component>
            <component id="counter1" path="counter"></component>
            <component id="counter2" path="counter"></component>
            <component id="list" path="list"></component>
        </view>
    </template>
    <script>
    import wepy from 'wepy';
    import List from '../components/list';
    import Panel from '../components/panel';
    import Counter from '../components/counter';
    
    export default class Index extends wepy.page {
    
        config = {
            "navigationBarTitleText": "test"
        };
        components = {
            panel: Panel,
            counter1: Counter,
            counter2: Counter,
            list: List
        };
    }
    </script>
    

    官方DEMO:

    project
        pages
            index
                index.json
                index.js
                index.wxml
                index.wxss
            log
                log.json
                log.wxml
                log.js
                log.wxss
        app.js
        app.json
        app.wxss
    

    使用wepy框架后目录结构:

    project
        src
            pages
                index.wpy
                log.wpy
            app.wpy
    

    wepy默认使用babel编译,支持ES6 / 7的一些新特性

    示例代码:

    import wepy from 'wepy';
    
    export default class Index extends wepy.page {
    
        getData() {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve({data: 123});
                }, 3000);
            });
        };
        async onLoad() {
            let data = await this.getData();
            console.log(data.data);
        };
    }
    

    原有代码:

    onLoad = function () {
        var self = this;
        wx.login({
            success: function (data) {
                wx.getUserInfo({
                    success: function (userinfo) {
                        self.setData({userInfo: userinfo});
                    }
                });
            }
        });
    }
    

    基于wepy实现代码:

    async onLoad() {
        await wx.login();
        this.userInfo = await wx.getUserInfo();
    }
    

    执行wepy new demo后,会生成类似配置文件。

    {
      "wpyExt": ".wpy",
      "sass": {},
      "less": {},
      "babel": {}
    }
    
    <style type="less" src="page1.less"></style>
    <template type="wxml" src="page1.wxml"></template>
    <script>
        // some code
    </script>
    

    程序入口app.wpy

    <style type="less">
    /** less **/
    </style>
    <script>
    import wepy from 'wepy';
    export default class extends wepy.app {
        config = {
                "pages":[
                "pages/index/index"
            ],
            "window":{
                "backgroundTextStyle": "light",
                "navigationBarBackgroundColor": "#fff",
                "navigationBarTitleText": "WeChat",
                "navigationBarTextStyle": "black"
            }
        };
        onLaunch() {
            console.log(this);
        }
    }
    </script>
    

    wepy页面index.wpy

    <style type="less">
    /** less **/
    </style>
    <template type="wxml">
        <view>
        </view>
        <component id="counter1" path="counter"></component>
    </template>
    <script>
    import wepy form 'wepy';
    import Counter from '../components/counter';
    export default class Index extends wepy.page {
    
        config = {};
        components = {counter1: Counter};
    
        data = {};
        methods = {};
    
        events = {};
        onLoad() {};
        // Other properties
    }
    </script>
    

    wepy组件com.wpy

    <style type="less">
    /** less **/
    </style>
    <template type="wxml">
        <view>  </view>
    </template>
    <script>
    import wepy form 'wepy';
    export default class Com extends wepy.component {
    
        components = {};
    
        data = {};
        methods = {};
    
        events = {};
        // Other properties
    }
    </script>
    

    wepy 组件通信与交互

    wepy.component基类提供三个方法$broadcast,$emit,$invoke
    
    $this.$emit('some-event', 1, 2, 3, 4);
    组件的事件监听需要写在events属性下,如:
    
    import wepy form 'wepy';
    export default class Com extends wepy.component {
    
        components = {};
    
        data = {};
        methods = {};
    
        events = {
            'some-event': ($event, ...args) {
                   console.log(`${this.name} receive ${$event.name} from ${$event.source.name}`);
            }
        };
        // Other properties
    }
    
    $invoke$invoke是一个组件对另一个组件的直接调用,通过传入的组件路径找到相应组件,然后再调用其方法。
    如果想在Page_Index中调用组件A的某个方法:
    
    this.$invoke('ComA', 'someMethod', 'someArgs');
    如果想在组件A中调用组件G的某个方法:
    
    this.$invoke('./../ComB/ComG', 'someMethod', 'someArgs');
    

    小程序通过Page提供的setData方法去绑定数据,如:

    this.setData({title: 'this is title'});
    

    wepy数据绑定方式

    this.title = 'this is title';
    

    在函数运行周期之外的函数里去修改数据需要手动调用$apply方法。如:

    setTimeout(() => {
        this.title = 'this is title';
        this.$apply();
    }, 3000);
    

    // 官方

    wx.request({
        url: 'xxx',
        success: function (data) {
            console.log(data);
        }
    });
    

    // wepy 使用方式
    // request 接口从只接收Object变为可接收String

    wx.request('xxxx').then((d) => console.log(d));
    

    优化事件参数传递

    // 官方
    <view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view>
    Page({
      tapName: function(event) {
        console.log(event.currentTarget.hi)// output: WeChat
      }
    });
    
    // wepy 建议传参方式
    <view id="tapTest" data-wepy-params="1-wepy-something" bindtap="tapName"> Click me! </view>
    
    events: {
        tapName (event, id, title, other) {
            console.log(id, title, other)// output: 1, wepy, something
        }
    }
    

    改变数据绑定方式

    // 官方
    <view> {{ message }} </view>
    
    onLoad: function () {
        this.setData({message: 'hello world'});
    }
    
    
    // wepy
    <view> {{ message }} </view>
    
    onLoad () {
        this.message = 'hello world';
    }
    

    组件代替模板和模块

    // 官方
    <!-- item.wxml -->
    <template name="item">
      <text>{{text}}</text>
    </template>
    
    <!-- index.wxml -->
    <import src="item.wxml"/>
    <template is="item" data="{{text: 'forbar'}}"/>
    
    <!-- index.js -->
    var item = require('item.js')
    
    
    
    
    // wepy
    <!-- /components/item.wpy -->
     <text>{{text}}</text>
    
    <!-- index.wpy -->
    <template>
        <component id="item"></component>
    </template>
    <script>
        import wepy from 'wepy';
        import Item from '../components/item';
        export default class Index extends wepy.page {
            components = { Item }
        }
    </script>
    

    WePY Demo

    <style lang="less">
        @color: #4D926F;
        .userinfo {
            color: @color;
        }
    </style>
    <template lang="pug">
        view(class='container')
            view(class='userinfo' @tap='tap')
                mycom(:prop.sync='myprop' @fn.user='myevent')
                text {{now}}
    </template>
    
    <script>
        import wepy from 'wepy';
        import mycom from '../components/mycom';
    
        export default class Index extends wepy.page {
            
            components = { mycom };
            data = {
                myprop: {}
            };
            computed = {
                now () { return +new Date(); }
            };
            async onLoad() {
                await sleep(3);
                console.log('Hello World');
            }
            sleep(time) {
                return new Promise((resolve, reject) => setTimeout(() => resolve, time * 1000));
            }
        }
    </script>
    

    登录相关API wx.login。
    获取用户信息API wx.getUserInfo。
    Storage相关 wx.getStorage,wx.setStorage,wx.clearStorage。

    开发

    目录结构:
    
    src
        components
            alpha.wpy --- 联系人
            chatboard.wpy --- "聊天面板" 组件
            contact.wpy --- "联系人" 组件
            discovery.wpy --- "发现" 组件
            input.wpy --- 聊天页输入框组件
            list.wpy --- 菜单列表组件
            me.wpy --- "我" 组件
            message.wpy --- message 组件
            tab.wpy --- tab 组件
        pages
            chat.wpy --- 聊天页
            index.wpy --- 首页
        app.wpy --- 小程序入口
    

    image.png

    src/pages/index.wpy:
    
    <style type="sass">
        .body, .tab_item {
            height: 100%;
        }
    </style>
    <template>
        <view class="body">
            <view class="tab_item tab_message">
                <component id="message"></component>
            </view>
            <view class="tab_item tab_contact">
                <component id="contact"></component>
            </view>
            <view class="tab_item tab_discovery">
                <component id="discovery"></component>
            </view>
            <view class="tab_item tab_me">
                <component id="me"></component>
            </view>
            <component id="tab"></component>
        </view>
    </template>
    src/pages/chat.wpy:
    
    <style type="sass">
        .body {
            height: 100%;
            background-color: #ededed;
        }
    </style>
    <template>
        <view class="body">
            <component id="chartboard"></component>
            <component id="input"></component>
        </view>
    </template>
    

    image.png

    image.png

    import m_contacts from '../mocks/contact';
    import m_history from '../mocks/history';
    
    export default {
        
        // 拉取用户信息
        getUserInfo () {},
        
        // 拉取与某个用户的聊天历史记录
        getHistory (id) {},
        
        // 拉取首页聊天列表
        getMessageList () {},
    
        // 发送聊天信息
        sendMsg (to, msg, type = 'text') {}
    }
    
    <template>
        <view class="message">
            <block wx:for="{{list}}" wx:for-index="index" wx:for-item="item">
                <view class="item" bindtap="select" data-wepy-params="{{item.id}}">
                    <view class="header">
                        <image class="img" src="{{item.icon}}"></image>
                    </view>
                    <view class="content">
                        <view class="name">{{item.name}}</view>
                        <view class="lastmsg">{{item.lastmsg}}</view>
                    </view>
                </view>
            </block>
        </view>
    </template>
    <script>
        import wepy from 'wepy';
        import api from '../common/api';
    
        export default class Message extends wepy.component {
    
            data = {
                list: []
            };
          
            methods = {
                select (evt, id) {
                    wx.navigateTo({url: 'chat?id=' + id});
                }
            };
            async loadMessage () {
                this.list = await api.getMessageList();
                this.$apply();
            }
        }
    </script>
    
    // src/pages/index.wpy
    onShow() {
        this.$invoke('message', 'loadMessage');
    }
    
    src/pages/index:
    
    <template>
        <view class="body">
            <view class="tab_item tab_message" hidden="{{currentTab != 0}}">
                <component id="message"></component>
            </view>
            <view class="tab_item tab_contact" hidden="{{currentTab != 1}}">
                <component id="contact"></component>
            </view>
            <view class="tab_item tab_discovery" hidden="{{currentTab != 2}}">
                <component id="discovery"></component>
            </view>
            <view class="tab_item tab_me" hidden="{{currentTab != 3}}">
                <component id="me"></component>
            </view>
            <component id="tab"></component>
        </view>
    </template>
    
    <script>
        //....
        changeTab (idx) {
            this.currentTab = +idx;
            this.$apply();
        }
    </script>
    
    <script>
        import wepy from 'wepy';
    
        export default class Tab extends wepy.component {
            data = {
                active: 0,
            };
            methods = {
                change (evt, idx) {
                    this.active = +idx;
                    this.$parent.changeTab(idx);
                }
            };
        }
    </script>
    
    parent.wpy
    <child :item.sync="myitem" />
    
    <repeat for="{{list}}" item="item" index="index">
       <item :item="item" />
    </repeat>
    

    请点赞!因为你的鼓励是我写作的最大动力!

    官方微信公众号

    吹逼交流群:711613774

    吹逼交流群

    展开全文
  • wepy踩坑日记

    2018-03-11 01:30:31
    wepy是一个微信小程序框架,支持模块化开发,开发风格类似Vue.js。可搭配redux使用,能同时打包出web和小程序。官方文档地址目录结构:sotre: redux(如果你创建项目时使用了redux的话)wepy.config.js: webpack配置...

    wepy是一个微信小程序框架,支持模块化开发,开发风格类似Vue.js。可搭配redux使用,能同时打包出web和小程序。

    官方文档地址

    目录结构:



    sotre: redux(如果你创建项目时使用了redux的话)

    wepy.config.js: webpack配置文件

    app.wpy: 入口文件

    project.config.json: 小程序项目配置文件

    index.template.html: web页面的入口文件

    pages: 存放主页面

    components: 存放组件

    mixins: 混合组件



    mixins:

    其中mixins是放混合组件的地方,比如很多page中都要用到wx.showToast方法。且都是loading方法。那么我们可以创建一个toast.js



    其中wepy继承了wx对象的方法,建议在wepy框架开发中不要用到wx对象的方法,虽然运行时效果是一样,但是打包时会cli报错(wepy中没有wx对象)。
    mixins的方法定义好后,就可以在组件中使用mixins了。

    首先在mixins中注册toast,然后就可以像调用自身方法一样,直接调用this.showToast()
    wepy中组件中使用的是class,vue中使用的的是对象。


    methods, events:
    在vue中,所有方法都定义在methods里面。而在wepy中,普通方法是直接定义在class静态方法里面。而events是定义组件间交互的方法。methods中只定义事件方法。




    关于computed:

    wepy中也有computed,props,data,watch等vue中有的一些属性(没有filter, directive)。
    props,data,watch这些基本和vue无异。
    但是在wepy中computed计算属性是无法传参的(本人没能找到传参的方法,且官方文档没有提到),在处理一些动态数据的时候,只能通过其他方法来操作。
    比如,服务端获取到的的JSON对象内有条时间戳数据需要转换成字符串,我的做法是将时间戳另外传值给子组件,然后在子组件中使用computed对props进行记算。


    事件传值:
    wepy中的事件可传递一些基本类型的参数,但是需使用双括号。否则获取到的参数是字符串类型。

    引用类型的参数可以使用 微信原生的 data- 属性绑定数据,然后在函数中用e.currentTarget.dataset 获取


    组件传值:

    wepy组件传值的设计思路类似vue 1.0 。这点在官方文档讲得比较详细。需要注意是如果你需要props传递的数据跟随父组件数据变化,要使用sync修饰符。如果是异步获取的服务端数据,必须要在父组件使用 this.$apply()方法来触发子组件的刷新。
    wepy中传递数据不能直接像vue中可以传递对象的属性,如 :data="data.someData" (vue)
    在wepy中这样的写法目测读不到数据(wepy中冒似没有哪个生命周期能直接观测到数据),我使用的是 :data.sync="data",然后到子组件中使用计算属性计算。



    动态绑定class:

    在vue中使用 :class="{.........}",就可以达到目的。
    在wepy中,要使用 微信原生的绑定语法 class="test-class {{.....}}"
    其中 test-class 是不需要动态绑定的class, 双括号中才是需要绑定的class


    循环渲染组件:
    wepy的循环渲染组件,必须使用 <repeat>标签,或者微信官方的<block>标签(这两个标签都是不会渲染到dom的)否则就不会渲染成功。




    wx:if:

    wepy中使用wx:if 方法,只会阻止视图渲染,并不会阻止组件初始化。
    如果在子组件onLoad 生命周期或者计算属性中使用了一些父级传递过来的动态数据,就会报错。


    如何在wepy中使用stylus可以看我的另一篇播客。

    本人才疏学浅,代码也写的疏漏百出,如有错误的地方,还望指证。如有更好的建议,请不吝赐教。对您如能有一点帮助,我将感到不胜荣幸。



    展开全文
  • 小程序框架wepy文档

    2018-05-13 23:01:54
    原文地址:https://www.npmjs.com/package/wepy...npm install wepy-cli -g在开发目录生成开发DEMO。wepy new myprojectwepy init standard myproject切换至项目目录。cd myproject开发实时编译。wepy bui...
  • 小程序框架wepy文档Github地址wepy官网:https://tencent.github.io/wepy/index.html项目创建与使用安装wepy以下安装都通过npm安装安装 wepy 命令行工具。npm install wepy-cli -g 在开发目录生成开发DEMO。wepy...
  • 小程序发展到了今天,已经开放出了太多的利好消息,API 也已经非常丰富和完善了。但是开发小程序,很多时候非常繁琐,这个原因是小...答案是:WePYWePY是腾讯开源的一个小程序开发框架,注意,是腾讯开源的。We...
  • wepy使用

    2020-05-20 11:46:36
    wepy框架的安装和使用 安装命令 npm install wepy-cli -g 创建wepy项目 wepy项目与小程序项目的关系 实时编译wepy项目 wepy项目目录结构 加载并配置wepy项目 .wpy文件使用说明 lang和src属性 配置代码高亮 ...
  • wepy 开发文档

    2018-05-21 16:09:16
    快速入门 1,项目创建和使用 安装wepy,一下都是通过npm安装 npm install wepy-cli -g 2,在开发目录生成开发DEMO。 wepy new project 3,开发实时编译 wepy build --watch 4,项目目录结构 dist node_...
  • 原生开发小程序 和 wepy 、 mpvue 对比 本文横向对比、探讨了下原生开发小程序,和目前比较热门的 wepy 、mpvue 开发小程序三种方式的优势和劣势;由于三者的篇幅都比较多,本文只是简单介绍。如有错误,请大神们...
  • Wepy使用记录—Wepy-Redux基本使用   wepy-redux刚开始看的时候真是不知道是啥一头雾水。网上找的资料大部分鬼话连篇。要说良心之作不是没有,请看这篇手把手教你在小程序里使用 Redux。这篇讲的是非常不错的,...
  • WePY的脱胎换骨

    2019-10-03 02:29:27
    对于前端来说,尤其是开发小程序的前端来说,WePY框架一定不陌生,他是一种小程序开发框架。而且是属于类Vue风格,掌握Vue再来学习WePY学习成本极低。 今天为啥要写这篇文章呢,因为在复习WePY时发现已经有了WePY2...
  • WePY项目的创建和使用 WePY的安装或更新都通过npm进行的哦,下面用到的fileName都是自己定义的哦 npm install -g wepy-cli (全局安装或更新命令行工具) wepy init standard flieName (创建自己的...
  • 前两天有初次接触wepy的同学问我,小程序的wepy框架怎么关闭Eslint校验,新建了一个wepy项目,安装了Eslint,怎么关闭,在那里找了很久,都没弄出来,所以发篇文章帮助初次接触wepy框架的朋友。 新建wepy项目后,在...
  • 使用wepy框架的时候后,在进行线上真机调试的时候出现部分页面在首次进入时,部分数据不显示。通过console输出相关数据到控制台时,可以看到,这些数据已经被绑定到了data中。 解决: 这个问题困扰了我想当长的时间...
  • WePy 整合云开发

    2019-02-27 16:56:09
    由于工作上的原因,有需求要使用 WePy,刚好,有了云开发的契机,就决定研究一下。 初试 WePY 想要做云开发和 WePY,首先要先熟悉 WePYWePY 其实之前就听说过,不过自己一直没有使用,更多还是习惯用小程序原生...
  • wepy框架入门教程

    2019-05-27 16:57:05
    wepy快速指南 小程序框架wepy开发文档 wepy开源 wepy官方文档 ###1:安装node 端开发框架和环境都是需要 Node.js ,先安装node.js开发环境,WePY借鉴了Vue.js(后文简称Vue)的语法风格和功能特性,vue的运行是要...
  • 微信开发者工具打开已有的wepy项目wepy项目是依赖npm的,所以在clone下来后,1.进入目录下,npm install2,运行 wepy build --watch,开启实时编译确认无误时,我们打开微信开发者工具,1.新建项目 2,填写如下,一定要...
1 2 3 4 5 ... 20
收藏数 4,554
精华内容 1,821
关键字:

wepy