Archives for : 前端

第1992天:taro 4 的 .eslintrc.js 问题

这个问题,困扰了我三天,必须给 taro 团队提个 bug report

问题描述
Taro 版本:4.2.0
模板:mobx
问题:生成 eslintrc.js 而非 .eslintrc.js

临时解决方案:手动把 eslintrc.js 更名为 .eslintrc.js 即可。

p.s.

npm 的时候还发现另一个问题,总是要加 sudo,问了 AI,说是“我的 Node.js 环境权限和配置已经完全乱掉了”,需要修复,以下是修复办法:

# 备份并删除被污染的 npm 配置
cp ~/.npmrc ~/.npmrc.backup 2>/dev/null
rm -f ~/.npmrc

# 创建一个干净的配置(只保留淘宝镜像)
echo “registry=https://registry.npmmirror.com” > ~/.npmrc

# 删除有权限问题的 cnpm 缓存
sudo rm -rf ~/.npminstall_tarball
sudo rm -rf ~/.cnpmrc

# 将全局 npm 目录的所有权还给自己
# 1. 修改目录本身的所有者
sudo chown -R $(whoami) $(npm config get prefix)

# 2. 修改目录下关键子文件夹及其内容的所有者
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

# 现在不需要 sudo 了
npm install -g @tarojs/cli@latest

# 验证安装成功
taro –version

第1990天:taro4 编译性能真强

h5 用 taro4 写。之前的老项目小程序一直是 taro2,相比之下,肉眼都能感受到 taro4 强劲的编译速度。

今天跑通了 http 方式调用云函数。

第1750天:wx.chooseMedia 和 wx.previewImage 会触发 onShow

微信小程序的 wx.chooseMedia 和 wx.previewImage,不仅会触发 page 的 onShow,还会触发 app 的 onShow。前者还可以理解,后者挺让人意外。

如果有接口调用或其他逻辑放在 app 和 page 的 onShow,要注意处理,避免不必要的调用和执行。

第1699天:云开发的 or 查询,要每个字段建一个索引

const whereParams = _.or([{
  shopId: 'xxx',
  touserMchShopId: 'xxx',
}, {
  mchShopId: 'xxx',
  touserShopId: 'xxx',
}])
db.collection(‘msg’)
  .where(whereParams)
  .orderBy(‘createTime’, ‘desc’)
  .get()

对于这样的查询条件,要每个字段建一个索引才能命中,包括 createTime 也要单独建一个索引。

但是 createTime 创建不了索引,问了技术支持的同学,说是系统自带了 createTime 的索引。

第1632天:bindgetphonenumber 和 bindtap 事件冲突

小程序的 button,如果同时存在 bindgetphonenumber 和 bindtap,大部分机型两个事件都会执行,极少部分机型只会执行 bindtap,不会执行 bindgetphonenumber,导致用户点击按钮时没有拉起手机号授权。

按这个逻辑,button 上的其他 bind 事件也不能和 bindtap 一起使用,例如 bindgetuserinfo、bindcontact 等,应该也会有部分机型不兼容。

第1597天:Cursor真的无敌

公司给前端同学买了 Cursor,初体验很惊艳。今天更是发生一件让我惊叹的事。

我在商品编辑页,想创建一个函数,名字叫 backToGoodsList。我真的只是这么想的,敲了个回车,这个名字就出来了。那一刻,我觉得自己仿佛是在用意念写代码。

当前文件中并没有 goodsList 这串字符,但是项目中有 goodsList 这个文件。

它应该是把整个项目都当成了上下文。

第1518天:useState 和 useReactive 状态管理区别

今天遇到一个 bug,本来用的是 useState,状态变了之后没有重新渲染组件。后面改成 useReactive 就好了。查一下有意外收获。

20250226-1

20250226-2

抖音云提供的 nodejs 模板是 typescript 的。刚开始没深入写,就调试一下接口,没觉得 ts 和 js 有啥太大区别,没想到定义个变量都成了老大难的事情。

还是老老实实改成 js。但是又遇到 webpack 打包 node 项目的问题,一时半会没太多时间处理。想想看后端打包个啥?就这几个包。

动一下手术:

1、删除 tsconfig.json。抖音云 node 模板自带的 Dockerfile,会判断是否有 tsconfig.json,有的话就会执行 npm run build。

2、修改 package.json

  • 删除 ts 相关的包
  • 删除 scripts 下的 “build”: “tsc”
  • 启动命令 “node dist/server.js” 改成 “node src/server.js”

3、如果要使用 es 规范,可以在 package.json 里添加 “type”: “module”,或者 .js 文件后缀改成 .mjs

4、导入模块时可能要用完整的 js 文件路径,例如:import { test } from ‘./test.js’

5、另外需要注意,抖音云调用的域名有自己专属的域名,而且目前只支持 http 协议,可以看云调用官方文档,例如​ ​developer.toutiao.com ​对应的云调用域名是 ​developer-toutiao-com.openapi.dyc.ivolces.com,我在这上面坑了好长时间,后面补看文档才发现。如果没按这个来,请求外部接口时会报错:

FetchError: request to failed, reason: unable to verify the first certificate at ClientRequest

第1362天:Taro 对抖音小程序支持不太好

这两天在折腾抖音小程序的交易系统组件,用的是 Taro,一不小心就掉坑里,只能用原生模块的方式来处理。

如果用原生模块能解决也就好了,但是仍然解决不了,就连抖音官方提供的 taro-demo 也运行不起来。

还是老老实实用原生来写靠谱。

实践证明,Taro 对微信小程序支持很好,但是对抖音小程序支持一般。

第1304天:vue3 + vite 项目部署在非根路径

项目通常都是部署在根目录,但是如果要部署在非根目录,例如 https://www.aaa.com/xxx/

要改三个地方,把目录名带上。

vite.config.js

export default defineConfig({
base: ‘/xxx/’,

})

router 文件

const router = createRouter({
history: createWebHistory(‘/xxx/’),

})

nginx 加一段配置(解决页面刷新报错的问题)

注意:root 路径改成自己服务器的真实路径

location ^~ /xxx/ {
root /opt/app/nginx;
index index.html index.htm;
try_files $uri Suri/ /xxx/index.html;
break;
}