惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
爱范儿
爱范儿
Y
Y Combinator Blog
T
Tor Project blog
V
Visual Studio Blog
U
Unit 42
B
Blog RSS Feed
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
T
Tailwind CSS Blog
G
Google Developers Blog
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
IT之家
IT之家
Microsoft Azure Blog
Microsoft Azure Blog
T
The Blog of Author Tim Ferriss
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
F
Fortinet All Blogs
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
Recorded Future
Recorded Future
博客园_首页
罗磊的独立博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
P
Proofpoint News Feed
Jina AI
Jina AI
博客园 - 【当耐特】
S
Security @ Cisco Blogs
I
Intezer
MyScale Blog
MyScale Blog
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
腾讯CDC
T
Tenable Blog
A
Arctic Wolf
T
Threat Research - Cisco Blogs
S
Securelist
Know Your Adversary
Know Your Adversary
Spread Privacy
Spread Privacy
C
Check Point Blog
NISL@THU
NISL@THU
Microsoft Security Blog
Microsoft Security Blog
V
Vulnerabilities – Threatpost

希仁之拥

领克900半年使用体验 | 希仁之拥的博客 Ubuntu 26.04 Desktop使用体验 | 希仁之拥的博客 【转载】谈谈不受欢迎的博客技术特征 | 希仁之拥的博客 【转载】ClaudeCode 你想知道的所有秘密,源码深度研究报告 | 希仁之拥的博客 2025年年终总结 | 希仁之拥的博客 集成和使用Openclaw后的思考 | 希仁之拥的博客 我买了领克900 | 希仁之拥的博客 服务器性能优化之io拷贝 | 希仁之拥的博客 Go-Sail导航站上线啦 | 希仁之拥的博客 今年国庆的一些感受 [2025] | 希仁之拥的博客 在Deepin 25上配置forticlient | 希仁之拥的博客 分享一些酷酷的站点 [20250908] | 希仁之拥的博客 Go-Sail发布v3.0.6版本了 | 希仁之拥的博客 我对V2EX发布$V2EX讨论的一些感受 | 希仁之拥的博客 如何让Stripe支持支付宝和微信支付 | 希仁之拥的博客 2025上半年里程碑 | 希仁之拥的博客 GitLab+Drone使用体验 | 希仁之拥的博客 四姑娘山之旅 | 希仁之拥的博客 近来帮同事做性能优化的过程回顾 | 希仁之拥的博客 聊聊接口的返回数据结构 | 希仁之拥的博客 由GORM的Updates语法糖 我把 Go-Sail 的文档站更新了 | 希仁之拥的博客 这就是我为什么讨厌拼多多 | 希仁之拥的博客 元旦快乐~ | 希仁之拥的博客 致敬还在写博客的我们 | 希仁之拥的博客 逐步的把图片资源迁移到星光图床上 | 希仁之拥的博客 帮弟弟配了一台mini主机 | 希仁之拥的博客 国庆的一些碎碎念 | 希仁之拥的博客 就这一刻而言,我觉得科技冷冰冰的。 | 希仁之拥的博客 如何使用acme.sh自动续签证书 | 希仁之拥的博客 Go-Sail的文档站点搭建好了 | 希仁之拥的博客 我的第一个谷歌浏览器插件发布成功啦! | 希仁之拥的博客 我开源了一个golang的web框架 | 希仁之拥的博客 流芳 | 希仁之拥的博客 春节快乐 | 希仁之拥的博客 我把博客站点重写了 | 希仁之拥的博客 阆中古城 | 希仁之拥的博客 入了把Keydous NJ80 | 希仁之拥的博客 Mac上有用的知识 | 希仁之拥的博客 记一次服务器被攻击 | 希仁之拥的博客 Ubuntu server不停机扩容系统盘 | 希仁之拥的博客 端午安康 | 希仁之拥的博客 搭建hadoop伪分布式集群总结 | 希仁之拥的博客 在goa框架中,如何访问原始请求数据 | 希仁之拥的博客 postgresql相关操作笔记 | 希仁之拥的博客 golang解析带命名空间的xml数据(带冒号的节点或属性名) | 希仁之拥的博客 【转载】解决deepin环境下wine QQ无法接收图片问题 | 希仁之拥的博客 杂项笔记 | 希仁之拥的博客 Mac如何修改通知横幅消失时间 | 希仁之拥的博客 Golang校验结构体是否实现了接口 | 希仁之拥的博客 关于deepin os的大半年使用体验 | 希仁之拥的博客 有态度的翻唱 | 希仁之拥的博客 【转载】Golang 在 Mac、Linux、Windows 下如何交叉编译 | 希仁之拥的博客 和幺幺一起成长的半年时光 | 希仁之拥的博客 Element UI中message消息提示实现原理 | 希仁之拥的博客 从predis组件开始了解如何与redis服务交互 | 希仁之拥的博客 【转载】 尤雨溪谈Vue.js :缔造自由与真我 | 希仁之拥的博客 【转载】百万 Go TCP 连接的思考: epoll方式减少资源占用 | 希仁之拥的博客 【分享】移除git中的commit历史(保留文件,仅移除提交历史信息) | 希仁之拥的博客 shell学习笔记 | 希仁之拥的博客 【分享】Ruby 之父松本行弘:程序员的乐趣、存在感与平衡 | 希仁之拥的博客 安利一下我用过的一些sublime text 3工具、插件及配置 | 希仁之拥的博客 PHP处理苹果内购数据验证 | 希仁之拥的博客 PHP获取XML所有节点名称 | 希仁之拥的博客 Sentinel::check() 在Laravel5.3版本之后总是返回false的解决方案 | 希仁之拥的博客 吃货的美食集,持续更新~ | 希仁之拥的博客 第二十一届成都汽车博览会 | 希仁之拥的博客 马云宣布1年后卸任集团董事局主席 由CEO张勇接任 | 希仁之拥的博客 nginx配置非443端口的https连接 | 希仁之拥的博客 PHP7 异常类型列表 | 希仁之拥的博客 【分享】《燃点》:不被嘲笑的愿望是不值得去实现的|一部属于创业者的电影 | 希仁之拥的博客 【分享】前端资源加载优先级[译] | 希仁之拥的博客 【小技巧】Laravel动态配置多个数据库连接 | 希仁之拥的博客 php使用ftp上传、下载文件 | 希仁之拥的博客 php使用mysqlnd扩展进行mysql异步并行查询 | 希仁之拥的博客 基于以太坊区块链,使用web3.js在geth服务器上执行合约方法以及事件监听 | 希仁之拥的博客 Smartisan OS | 希仁之拥的博客 母校 | 希仁之拥的博客 php后期静态绑定 | 希仁之拥的博客 [mysql优化]子查询与连接查询 | 希仁之拥的博客 PHP常见运行模式及原理 | 希仁之拥的博客 mysql用户与授权 | 希仁之拥的博客 如何在ubuntu14.04上安装composer | 希仁之拥的博客 关于mews/captcha for laravel存在method [validateCaptcha] doesn't exists解决方法 | 希仁之拥的博客
第一次开发微信小程序 | 希仁之拥的博客
希仁之拥 · 2023-10-09 · via 希仁之拥

成品

少啰嗦,先看东西:
我做的这个小程序叫做「生活好评助手」,大家可以使用微信搜索这个小程序名称,或者是扫下面的小程序码进行体验。
生活好评助手
做这个东西的起因有两个,第一是有两次团建聚餐,服务员告诉我们凑齐多少个好评,就送我们饮品、小吃,这个好评不仅有个数要求,而且还有字数要求。一时间,大家竟然没有找到合适的工具。第二是虽然自己曾经做过公众号/订阅号以及小程序的相关开发,但都是后端服务,从来没有完整的实现过前端业务,本来这次做这个工具也是打算做web端的,后面想着干脆试试小程序,权当是练手了。

遇到的问题

在完成这个小东西的过程中,前前后后遇到不少的问题,记录一下,分享给大家。

开发层面的

首先,虽然本质上小程序最终也是运行在浏览器内核中的,但是在开发规范和约束上面,就有许多的不同。比如,不能直接使用浏览器的如window、document、history、fetch、XMLHttpRequest等原生对象或属性,需要使用微信官方提供的类库,比如发起请求是wx.request({}),操作本地存储是wx.getStorageSync()等等。
其次,工程目录结构需要遵守微信的规范,比如页面文件需要遵守如下规范:

pages
├── customer
│   ├── index.js
│   ├── index.json
│   ├── index.wxml
│   └── index.wxss
├── index
│   ├── index.js
│   ├── index.json
│   ├── index.wxml
│   └── index.wxss
├── overview
│   ├── index.js
│   ├── index.json
│   ├── index.wxml
│   └── index.wxss
└── tools.wxs

其中.js是业务逻辑代码,.wxml是渲染层代码,可以理解为是传统的html代码,.wxss是样式代码,可以理解为传统的css文件(外部样式)。
这其中有一个相对友好的的地方:如果你熟悉Vue或React,那么你上手就会比较容易,当然熟悉Vue更佳。它的数据绑定,条件渲染甚至是插槽等等都会让你倍感亲切。
第三,引用第三方组件,当我查阅微信小程序开发文档相关文章的时候,才发现,现在可真是处在了一个好时候,看其他开发者留言讲的,以前都是要手动拷贝源码,然后再引入...现在只需要按照一定的步骤,借助它的开发工具,编译引入即可。
第四,由于它的解析渲染机制的缘故,无法实现在Vue中类似这样的行为:

# sentence是一个字符串变量,而slice是内置方法
<div>{{ sentence.slice(0, 10) }}</div>

这个时候需要支持这样的功能,你需要使用它的WXS模块WXS 语法参考 /模块,最终实现的方案是:

<wxs src="../tools.wxs" module="tools"></wxs>
<view class="text-gray text-sm">
   {{tools.stringFunc.overflowHidden(content, 15, '...')}}  
</view>

tools.wxs的内容如下:

// pages/tools.wxs

var tools = {
  string: {
    overflowHidden: function(str, length, letter) {
      if (!str || str.length <= length) { return str }
      return str.slice(0, length) + (letter ? letter : '...')
    }
  }
}

module.exports = {
  stringFunc: tools.string
}

看上去是不是有些许繁琐呢?

开发层面的暂时就啰嗦这么多吧,以后想到了再补充。

资质/审核层面的

由于是在微信的体系下,免不了各种的条条框框,例如,小程序的名称、简称、Logo、描述等等需要审核。其次就是备案,域名备案、小程序备案等等。

另外,你们可以看到我这个小程序是个人资质,因此能做的事情非常少,已经把功能砍到只留下了一个😭。

收获

最后,在磕磕绊绊之后,最终还是把它完成上线了。收获还是蛮多的,技术层面就不再赘述了,对我来说,更有意义的收获是从无到有完整的经历了一个小程序的从开发到资质审核再到发布这一系列的流程。
Enjoy it. 🍻😊


980_120.png(via stardots.io)

觉得博主写的不错?给他一个赞赏:

keepchen的赞赏码-支付宝 keepchen的赞赏码-微信