小程序对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"}}

  

【微信小程序】 使用NPM包与VantWeapp的更多相关文章

  1. 微信小程序 - 使用npm(第三方包)

    使用示例: 1. 开启“使用npm模块” 2. 新建 node_modules 文件夹 3. cd到新建 node_modules 所在的目录(非node_modules文件夹内) npm insta ...

  2. uni-app开发微信小程序引入UI组件库(Vant-weapp)步骤

    uni-app开发微信小程序引入UI组件库(Vant-weapp)步骤 这里以vant-weapp为例 uni-app官方文档介绍引入组件的方法 1. 新建相关目录 根目录下创建 wxcomponen ...

  3. 复用微信小程序源码包后仍然有原小程序的版本管理怎么处理

    前言: 复用微信小程序源码包后,重新创建项目导入源码包,会发现开发者工具版本管理中仍然有原来小程序的版本,这样就不太好了.毕竟是一个新的小程序,需要有新的版本控制的.那么这个问题怎么处理呢? 解决方案 ...

  4. 微信小程序使用npm安装第三方库

    微信小程序在 2.2.1 版本后增加了对 npm 包加载的支持,使得小程序支持使用 npm 安装第三方包. 之前在微信开发者工具选择“构建npm”会报错“没找到node_modules”目录”,这是因 ...

  5. fiddler学习总结--手机端(APP/微信小程序)抓包

    步骤一.手机和电脑要在同一个局域网中 步骤二.完成fiddler的基本配置,与web端抓包一样: TOOLS-->options-->connections-->1.设置端口:2.勾 ...

  6. 微信小程序使用npm安装包

    小程序现在支持直接通过npm安装包了,点击这里了解更多. 记录一下我自己的安装步骤及安装过程中遇到的一些问题.希望能够帮助到正在阅读此篇文章的你~ 我就直接通过在项目根目录安装miniprogram- ...

  7. 小程序支持npm包

  8. 微信小程序开发教程 #043 - 在小程序开发中使用 npm

    本文介绍了如何在微信小程序开发中使用 npm 中包的功能,大大提高微信小程序的开发效率,同时也是微信小程序系列教程的视频版更新. 微信小程序在发布之初没有对 npm 的支持功能,这也是目前很多前端开发 ...

  9. 微信小程序中实现自定义省市区选择

    背景: 1.小程序官方提供的省市区组件的数据与原有的数据对应不上,官方的数据太旧 2.小程序重构以后没有在使用vant等框架 实现过程: 1.安装依赖 a.微信小程序使用npm包配置: 1.初始化pa ...

  10. 原生微信小程序脚手架(支持npm)

    微信小程序支持npm 为了支持生态扩展,社区贡献者可以提供更加丰富的功能,已经支持了第三方小程序开发功能,见如下地址. 微信小程序支持npm https://developers.weixin.qq. ...

随机推荐

  1. 从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践

    本文分享自华为云社区<DTSE Tech Talk × openGemini :从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践>,作者:华为云开源. 在本期<从 ...

  2. Stable diffusion采样器详解

    在我们使用SD web UI的过程中,有很多采样器可以选择,那么什么是采样器?它们是如何工作的?它们之间有什么区别?你应该使用哪一个?这篇文章将会给你想要的答案. 什么是采样? Stable Diff ...

  3. numpy基础--用于数组的文件输入输出

    以下代码的前提:import numpy as np numpy能够读写磁盘上的文本数据或二进制数据. 1 将数组以二进制格式保存到磁盘 np.save和np.load是读写磁盘数组数据的两个主要函数 ...

  4. Java中类的构造 与 方法的重载

    类的构造方法 定义:构造方法与类名相同,且没有返回值,且不需要void修饰 Car bmcar = new Car(); 特点:类中没有定义时,会默认有一个无参的构造方法,在无参的构造方法中为成员变量 ...

  5. Redis 常用的数据结构简介与实例测试【Redis 系列二】

    〇.都有哪些数据结构? Redis 提供了较为丰富的数据类型,常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合).Zset(有序集合). 随着 Redis 版本的 ...

  6. 2 分钟,搞懂 SLO 最佳实践

    本文是<SRE,Google运维解密>读书笔记,连载第三篇.微信公众号修改了推文逻辑,尤其是 iOS,建议对本公众号 SRETalk 加星标,以免错过后续系列推文. 本文介绍 SLO,曾经 ...

  7. koishi机器docker搭建

    硬件要求: 可用内存:1G以上 存储空间:1G以上 cpu:不限制 配置: 在docker的存储空间目录建立koishi文件夹 下载docker镜像 koishijs/koishi 建立容器,具体设置 ...

  8. 容器docker技术

    我们先看看很久很久以前,服务器是怎么部署应用的! 由于物理机的诸多问题,后来出现了虚拟机. 但是虚拟化也是有局限性的,每一个虚拟机都是一个完整的操作系统,要分配系统资源,虚拟机多道一定程度时,操作系统 ...

  9. 说一下 session 的工作原理?

    session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中.这样客户端每次访问 ...

  10. spring的问题-能耗、学习曲线

    说实话,在过去将近20年中,spring对于it行业的帮助还是很大的,尤其是信息系统建设方面. 但在我看来,spring的发展也许进入了一个困局. 开始的时候,spring的确是一个还是算小巧的工具, ...