• 【微信小程序】 使用NPM包与VantWeapp


    小程序对npm的支持与限制

    目前,小程序中已经支持使用npm安装第三方包,从而来提高小程序的开发效率。

    但是,在小程序中使用npm包有如下3个限制:

    ① 不支持依赖于Node.js内置库的包
    ② 不支持依赖于浏览器内置对象的包
    ③ 不支持依赖于C++插件的包

    总结:虽然npm_上的包有千千万,但是能供小程序使用的包却"为数不多”

    1.什么是Vant Weapp

    Vant Weapp是有赞前端团队开源的一套小程序UI组件库,助力开发者快速搭建小程序应用。

    它所使用的是MIT开源许可协议,对商业使用比较友好。

    官方文档地址:

    https://youzan.github.io/vant-weapp/#/home
    

      

    2.安装Vant组件库

    在小程序项目中,安装Vant组件库主要分为如下3步:

    ①通过ηpm安装(建议指定版本为@1.3.3)
    ②构建npm包
    ③修改app.json

    https://youzan.github.io/vant-weapp/#/quickstart

    使用CMD打开微信小程序根目录

    首先使用NPM初始化项目

    npm init -y

    执行NPM安装Vant / Weapp命令

    λ npm i @vant/weapp@1.3.3 -S --production
    npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\Administrator\Desktop\戴知舟的目录\frontend-note\Stage7 微信小程序\miniprogram-stud
    y-test\package.json'
    npm notice created a lockfile as package-lock.json. You should commit this file.
    npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\Administrator\Desktop\戴知舟的目录\frontend-note\Stage7 微信小程序\miniprogram-study-t
    est\package.json'
    npm WARN miniprogram-study-test No description
    npm WARN miniprogram-study-test No repository field.
    npm WARN miniprogram-study-test No README data
    npm WARN miniprogram-study-test No license field.
    
    + @vant/weapp@1.3.3
    added 1 package from 1 contributor in 16.105s
    

    构建NPM包:

    构建完成提示信息:

    要检查是否存在这个目录

    如果目录不存在,构建没有成功,要重新构建

    之前的版本是需要勾选【使用NPM模块】

    但是我这个版本已经没有了

    看了Vant文档得知,还需要配置,project.config.json文件

    所以根据文档的配置,实际上是这样:

        "packNpmManually": true,
        "packNpmRelationList": [
          {
            "packageJsonPath": "./package.json",
            "miniprogramNpmDistDir": "./"
          }
        ],
    

      

    修改app.json

    將app,json中的"style": "v2” 去除, 小程序的新版基础组件强行加上了许多样式,

    难以去除,不关闭将造成部分组件样式混乱。

    3.使用Vant组件

    安装完Vant组件库之后,可以在app.json的usingComponents节点中引入需要的组件,

    即可在wxml中直接使用组件。

    // 通过 npm 安装
    // app.json
    "usingComponents": {
      "van-button": "@vant/weapp/button/index"
    }
    

    使用Button组件:

    <van-button type="primary">按钮</van-button>
    

    VantWeapp样式定制:

    CSS变量基本用法:

    https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties
    

    小程序页面的根节点是page标签,

    局部页面样式,定义在页面的.wxss文件中

    如果要全局配置,定义在app.wxss文件中

    page {
        --but ton-danger-background-color:■#C00000;
        --button-danger-border-color:■ #D60000;  
    }
    

    关于VantWeapp主题的配置:

    https://youzan.github.io/vant-weapp/#/theme
    

    VantWeapp默认使用Less插件编写

    CSS的变量前缀是@开头,实现自定义配置只要改成--前缀即可

    小程序API的Promise化

    1.基于回调函数的异步API的缺点

    默认情况下,小程序官方提供的异步API都是基于回调函数实现的,

    缺点:容易造成回调地狱的问题,代码的可读性、维护性差!

    2.什么是API Promise化

    API Promise化,指的是通过额外的配置,将官方提供的、基于回调函数的异步API,

    升级改造为基于Promise的异步API,从而提高代码的可读性、维护性,避免回调地狱的问题。

    3.实现API Promise化

    在小程序中,实现API Promise化主要依赖于miniprogram-api-promise这个第三方的npm包。

    它的安装和使用步骤如下:

    npm install --save miniprogram-api-promise@1.0.4
    

    先把之前的miniprogram_npm删除,再进行构建

    微信小程序IDE这个构建功能不是很稳定,每次构建之后要检查构建的miniprogram_npm包是否存在

    若不存在则需要重新构建

    在app.js 初始化配置

    /**
     * NPM支持
     * npm init -y
     * 
     * 项目配置
     * project.config.json
     *  "packNpmManually": true,
     *  "packNpmRelationList": [
     *    {
     *      "packageJsonPath": "./package.json",
     *      "miniprogramNpmDistDir": "./"
     *    }
     *  ],
     * 
     * 依赖安装
     * npm install --save miniprogram-api-promise@1.0.4
     *  
     * 【工具】-> 【使用NPM进行构建】
     * 
     * 在小程序入口文件中(app.js),
     * 只需调用一次promisifyAll() 方法即可实现异步API的Promise 化
     * 
     */
    import { promisifyAll } from 'miniprogram-api-promise'
    const wxp = wx.p = {}
    promisifyAll(wx, wxp)
    

      

    使用Promise

    测试的组件

    <van-button type="primary" bindtap="getPromiseTest">
      Promise测试
    </van-button>
    

    调用Promise

      /**
       * promise测试
       */
      async getPromiseTest() {
        const { data: res } = await wx.p.request({
          url: 'https://www.escook.cn/api/get',
          method: 'GET',
          data: { name: 'zs', age: 20 }
        }) 
        console.log(res)
      }
    

    请求成功:

    {"message":"get ok","data":{"name":"zs","age":"20"}}
    

      

  • 相关阅读:
    WPF中如何确定一个页面是否是在浏览器中承载的
    WPF中Image控件的Source属性
    WPF中如何使用代码操作数据模板生成的控件
    WPF中连续旋转时角度错误的问题
    在没有 IIS 的条件下运行 ASMX(转自 msdn)
    在 ASP.NET 2.0 中上载文件 —— 解决文件大小限制
    javascript专题:如何构建自己的js库
    WPF4多点触摸事件
    事件冒泡
    《精通javascript》几个简单的函数(一)
  • 原文地址:https://www.cnblogs.com/mindzone/p/16223460.html
Copyright © 2020-2023  润新知