在使用彩云翻译的 API 进行应用开发的时候,遇见了一个很尴尬的问题,提交上去的内容会丢失换行。

于是给彩云翻译的邮箱发了一封邮件,一天后,我就收到了官方人员的微信好友邀请(因为我的微信写在邮件的footer)。
经过一番沟通后了解到,目前彩云翻译的 API 会默认移除换行符 & HTML 标签,因此,在开发时,暂时还需要自行对文本进行切割,提取其中的文本内容,按段进行翻译,解决这个问题。
不过,官方也在反馈,会评估提供翻译 HTML 文档的能力,期待一下吧。


在使用彩云翻译的 API 进行应用开发的时候,遇见了一个很尴尬的问题,提交上去的内容会丢失换行。

于是给彩云翻译的邮箱发了一封邮件,一天后,我就收到了官方人员的微信好友邀请(因为我的微信写在邮件的footer)。
经过一番沟通后了解到,目前彩云翻译的 API 会默认移除换行符 & HTML 标签,因此,在开发时,暂时还需要自行对文本进行切割,提取其中的文本内容,按段进行翻译,解决这个问题。
不过,官方也在反馈,会评估提供翻译 HTML 文档的能力,期待一下吧。


在发布一个 NPM 包时,我遭遇了这样的一个问题:
You should bug the author to publish it (or use the name yourself!)
Code language: PHP (php)经过查询后发现,是因为我之前使用的 Login Token 失效了,在这种情况下,只需要重新执行npm adduser添加用户,即可解决问题。
我之前以为是 login 没用,要 adduser 才能使用,后来查询了一下 npm 的文档发现 login 是 adduser 的一个别名,二者功能是一样的,因此,不存在 login 的权限不如 adduser 的问题。

如果你使用 Typescript 编写 npm 包,可能会发现自己编写的 ts 文件也被发布到了 NPM 上去。
一般来说,这个其实并没有什么,除非你的包并不开源,又或者你有精神洁癖,希望用户看到的包的文件目录是足够简单明了的。
这个时候,你可以借助 npm 中的 files 这个字段,来控制你需要上传的文件。
比如,如果你按照下面的方式配置 files 就可以控制你的包在发布时,只发布有限的文件,比如必须的 package.json、LICENSE、README 以及构建产物 dist 文件夹。
{
"name":"your-package",
"files":[
"package.json",
"README.md",
"LICENSE",
"dist"
]
}
Code language: JSON / JSON with Comments (json)
对于一些比较流程化的工作,我希望将其自动化,因此我写了一个脚本,帮助我来完成这个基本的工作。
但在写完后,发现了一个问题:
helper: 无法加载文件 C:\Users\bestony\AppData\Roaming\npm\helper.ps1,因为在此系统上禁止运行脚本。有关详
细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ helper
+ ~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [],PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
Code language: JavaScript (javascript)这个问题倒是不复杂,是因为 PowerShell 相比于 CMD 拥有更全面的权限控制。如果想要解决的话,有两种方式:
在目前的 Windows 中,依然是 CMD & PowerShell 双轨制,你可以直接使用 CMD 来执行你的命令,就无需关注这个权限的问题了。
如果你需要继续使用 PowerShell,就要关闭 PowerShell 的校验,使用管理员模式打开 PowerShell,并执行如下命令,来关闭 PowerShell 的校验即可。
set-ExecutionPolicy RemoteSigned
Code language: JavaScript (javascript)
在《如何成为Golang贡献者》中,我介绍了, 我对于 Golang 的第一个贡献是修复了一处 Typo ,这是整个开源贡献中可以说是最简单的一部分。
那如果你现在是一个新人,希望参与到项目中,或希望走通整个贡献的流程,那么修复 typo 是一个不错的选择。但对于新人来说,通过阅读代码来查找 typo ,显然不是一个很好的选择。
在这种情况下,自然会产生一个问题:“有没有一种方式,可以让我快速找到 typo 呢?”
答案是肯定的,我们可以借助一些拼写检查工具,来检查具体哪些代码文件中存在 typo。
这里我使用的是 Client9 的 Misspell ,一个基于 Golang 写就的拼写检查工具(用 golang 的拼写检查工具来检查 golang 源码,很合理)。
这个工具的下载安装十分简单,执行如下代码即可安装:
curl -L -o ./install-misspell.sh https://git.io/misspell
sh ./install-misspell.sh
Code language: JavaScript (javascript)安装完成后,即可使用 misspell 命令来进行拼写的检查。以 django 项目为例,具体的执行命令如下:
git clone git@github.com:django/django.git
cd django
misspell ./*
Code language: PHP (php)可以看到打印出了 misspell 认为可能是 typo 的地方,

接下来你要做的就很简单了,根据 misspell 的结果,查找具体的文字,确保是否真的是 typo,如果是真的 typo,就按照项目的贡献规范进行贡献即可。
借助 misspell,你可以很轻松的给一个项目快速的开始贡献代码,但如果真的是希望参与到开源社区当中,一定不能只是做 typo 的修复。typo 修复一般来说都是开源前辈留给后辈学习用的,对于实际的贡献者而言,除了熟悉流程,并没有太多的价值,因此,你还是需要将开源项目应用在自己的工作生活中,并解决一些实际的问题,才会更有价值。

是的,我成为了 Golang contributor

在听完了 Go 夜聊的第 2 期播客后,我突然觉得,嗯,我是应该加入一个社区,而不是总是以一个创建者的身份去创建开源项目。可以有一个新的视角。
于是,我选择了加入我最常写的三种语言其一的 Golang。
然后接下来的问题就是,应该如何做贡献?
我查阅了一些资料,完成了此次贡献。并将其记录在此,希望可以帮到你。
给 Golang 做贡献需要一些基本配置,这里不再赘述,只写明要求:
实际上,既然要贡献,首先你要解决的问题是,你想贡献什么问题?绝大多数的贡献都是基于某一个特定的问题进行的。
golang 的贡献是基于 Git 进行的,因此,你在贡献前,需要确保你的各项基本信息是复合要求的。比如,你要在网站上签署 CLA(Contributor License Agreement);你的 Git Username 和 Git Email 应该符合和你签署 CLA 的信息是符合的。
签署完成后,可以使用你的 Google 账号登陆 https://go-review.googlesource.com/login/,注册一个账号。后续的 Code Review 也会在这里进行。
需要注意的是,目前 Golang 无法从中国大陆提交贡献,所以你应该在一台海外服务器上进行贡献。以确保可以提交。想了解具体情况,可以查看附录中的 GitHub issue #20065
Golang 在提交时,是通过 Git 提交的,不过和一般我们常用的 HTTP 账号密码鉴权 or Key 鉴权不同,Golang 采用的是 GitCookies 进行提交的。因此,你需要配置 Git Cookies。
访问 go Git repositories – Git at Google (googlesource.com),登陆后,点击右上角的 Generate Password

在新的页面中,复制下方蓝色框体中的 bash 代码,并粘贴在你的 Shell 中粘贴并执行,即可配置好 Git Cookies

在服务器上执行如下命令,安装代码提交工具
go get -u golang.org/x/review/git-codereview
Code language: JavaScript (javascript)安装完成后,执行如下命令验证
git-codereview help
接下来的就很简单了,和我们日常贡献代码很接近了
首先你需要 clone 代码,并执行测试,确保你 clone 的代码本身是没问题的(不然可能会出现你改了一大堆,发现问题不是你自己的)
git clone https://go.googlesource.com/go
cd go/src
<meta charset="utf-8">./all.bash # 执行测试,如果看到 ALL TESTS PASSED 则说明代码没问题。
Code language: PHP (php)修改代码按照我们一般的分支协作的方式来进行即可
git checkout -b feat/xxxx
# 修改文件...
git add [files...]
git codereview change # 为你的贡献创建一个 commit
Code language: PHP (php)完成代码贡献后,你就可以准备提交你的代码了。不过,你还是要跑一次测试,确保你的修改没有导致某些地方坏掉。
./all.bash # 执行测试,如果看到 ALL TESTS PASSED 则说明代码没问题。
git codereview mail #提交你的代码
Code language: PHP (php)提交完成后,你就会在 https://go-review.googlesource.com/ 上有一个新的 Change 的记录,然后系统会自动帮你分配 Maintainer 进行 Review,这个阶段如果 Reviewer 没有给你提出需要修改的话,你只需要等待你的代码被合并即可。

需要注意的是,Golang 对于代码的合并有要求,需要 2 个 +2 才能合并到代码库中。因此,你的代码可能会很快被某个 Maintainer Review,但很久才被另外一个 Maintainer Review (其实也没多久,只是相比于第一个)
当两个都合并完成后,左上角的标识就会变成 Merged ,此时就说明你的代码贡献成功啦!

如果你使用自己的本地电脑进行提交,你会发现,你会收到一个报错
Access Denied (not available from your location)
这是因为 Golang 官方禁止了中国区的提交,将 golang 源码对于中国区进行了只读状态的设置。
这并不是 Golang 不欢迎中国开发者贡献,只是对于 GFW 封禁 golang.org 的一种抵抗。

你只需要将贡献环境从你的本地电脑,换成任何一个海外的服务器,就可以正常提交。
来源:access to Gerrit denied because of location · Issue #20065 · golang/go (github.com)
golang 的 commet message 有自己的格式,你在提交的时候可以以这个格式进行提交,这样后续就不需要 Reviewer 帮你改了。
[模块] 修改内容
详细信息
Github link
Code language: CSS (css)给大家举个例子,大家就知道是什么样的了。首先,下面这个是我自己的 commit message
typo: fix reponse to response in src/net/http/header.go
Change-Id: I238bc90c4f273c352ef924989a44c6e927839128
Code language: HTTP (http)Reviewer 帮我调整后的格式
net/http: fix typo in header.go
Change-Id: Ia6df881badf9a704c7f56967404d37e230b88a09
Reviewed-on: https://go-review.googlesource.com/c/go/+/343969
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Damien Neil <dneil@google.com>
Code language: HTTP (http)更加简单明了。
Change ID、Reviewed on、Reviewed by 是系统自动添加的,你不需要关注。
来源:Contribution Guide – The Go Programming Language (google.cn)

在对 WXMarkdown 进行改造的时候,我准备使用 Vercel 提供的 cloudFunction 来实现。
在执行时,出现了一个奇怪的问题,当我使用 RegExp 进行匹配的时候,会出现匹配成功和匹配失败的情况。
当我回溯代码时,发现问题出现在
import type { NextApiRequest, NextApiResponse } from "next";
const URL = require("url");
const rule = /BV([0-9a-zA-Z]{1,10})/g;
export default function handler(
req: NextApiRequest,
res: NextApiResponse<MDResponse>
) {
const { url } = req.body;
const result = rule.exec(url);
}
Code language: JavaScript (javascript)result 的匹配结果不是每次都是可用的,会交替一次 null,一次有结果。
搜索后了解到,这是由于 RegExp 本身是具有状态的,在这种情况下,由于后一次的调用复用了之前的请求,所以出现了一次有结果,一次没有结果。
在这种情况下,有两种解决方案:

wxa.js 默认使用的样式语言是 scss,所以其默认创建的项目就会要求安装 node-sass,但由于 node-sass 依赖了 binding.node 等包,导致常常会出现 node-sass 安装失败的问题。
如果你并没有在项目中使用 scss ,则可以考虑将你项目种的 node-sass 移除,从而缩小项目的依赖体积,提升项目安装成功的概率。
由于 wxa 默认使用了 scss,因此,我们需要移除项目中针对 scss 的配置,并移除代码中的 scss ,这样才能保证后续在编译的过程中,不会调用 node-sass 的依赖。
在 wxa 的默认配置中,配置了 sass/scss 的依赖,我们如果不移除这个依赖,就会导致后续在构建的时候,自动安装相关依赖。

因此,我们需要在 wxa.config.js 中添加 use 相关配置,且仅保留 babel 作为依赖,具体修改如下:
module.exports = {
plugins: [
new ReplacePlugin({
list: envlist,
}),
],
// 你的其他配置
use: [
{
test: /\.js$/,
name: 'babel',
},
],
// 你的其他配置
};
Code language: JavaScript (javascript)在移除了 wxa.js 的构建依赖后,接下来需要移除代码中关于 scss 的标示,从而使我们的代码可以被正确的渲染工具所渲染。具体修改如下所示,右侧为修改后的结果

当我们完成了上述的操作之后,就可以放心的移除系统中关于 sass 的依赖了,从而减少整个项目的体积和对 node-sass 的依赖。
你只需要执行如下的命令,就可以移除项目中关于 sass 的依赖了。
npm uninstall @wxa/compiler-sass
// 或者
yarn remove @wxa/compiler-sass
Code language: JavaScript (javascript)scss是一个好的语言,但 node-sass 却不是一个好的工具,如果你不使用它,不妨将其移除,提升你的项目构建速度。

TailwindCSS 是我最近一段时间使用比较多的 CSS 框架,相比于传统我们习惯的前端框架,它的限制更少,你可以根据自己的需要来编写样式。如果你配置了清除没用到的 CSS,TailwindCSS 的体积甚至可以远小于其他框架。
也因为上面的这些因素,我也自然而然的会选择将其放在小程序中来使用。而由于我使用的是 wxa.js ,所以这里也是一个对应的 wxa.js 的教程。
1. 安装 TailiwndCSS 到你的项目中
由于 Taildwind 默认推荐使用的是 PostCSS,但其需要的是 PostCSS 7 或者 8 ,但 WXA.js 提供的 PostCSS 插件使用的是 6 ,所以这里我就选择不将其作为 PostCSS 插件来安装。
在 WXA 项目根目录中执行如下命令,会在你的项目根目录中生成一个 tailwindcss.config.js,它会作为后续你的项目配置的配置文件。
npx tailwindcss-cli@latest init
Code language: CSS (css)随后,在你的项目根目录创建一个 tailwind.css 文件,并在其中加入如下代码,这个文件作为你后续样式基础文件。
@tailwind base;
@tailwind components;
@tailwind utilities;
Code language: CSS (css)添加完成后,你就可以执行如下命令,来生成一个默认的 tailwindcss 样式文件。
npx tailwindcss-cli@latest build ./src/tailwind.css -o ./src/tailwind.css
Code language: CSS (css)生成的效果如下,可以看到,未任何处理的情况下,整个 CSS 文件足足有 3.81 MB,不过不用担心,我们可以清除其中的样式。

如果你希望后续不输入这个命令,可以将其添加到你的项目的
package.json中。
2. 移除默认的浏览器自动添加的 prefix
由于不同浏览器在不同的样式上可能有所不同,tailwindcss 会在生成的时候帮助我们生成一些特定的前缀。但小程序不涉及到浏览器的兼容性问题,所以我们可以关闭 taildwindcss 的 autoprefixer。
将刚刚的生成命令中加入 --no-autoprefixer 的参数,就可以生成不含 prefix 的 CSS 文件
npx tailwindcss-cli@latest build --no-autoprefixer ./src/tailwind.css -o ./src/tailwind.css
Code language: CSS (css)可以看到,去除 prefix 后,我们的文件缩小至 3.46MB。

3. 移除不用的样式
tailwindcss 提供了根据页面结构分析使用样式的功能,从而可以实现在构建生产版本之时,移除没有使用的样式,从而可以达到缩小样式的目的。
在项目中的配置 purge 属性,就可以实现 tailwindcss 自动分析 wxa 文件,从而移除没有用到的样式。
module.exports = {
purge: ['./src/**/*.wxa'],
darkMode: false, // or 'media' or 'class'
theme: {
extend: {},
screens: [],
},
variants: {
extend: {},
}
}
Code language: JavaScript (javascript)配置了 purge 属性后,可以看到,样式文件锐减到 9.93KB (因为我使用的样式很少)

4. 在 wxa.js 中引入
修改生成文件的命令,使生成的文件的后缀为 wxsss,从而可以继续使用微信小程序的 @import 语法。
npx tailwindcss-cli@latest build --no-autoprefixer -o ./src/tailwind.wxss
Code language: CSS (css)重新生成样式文件后,只需要在 app.wxa 文件中的 style 块中加入如下引入代码,在项目中引入 tailwindcss。
因为 tailwindcss 只生成一个样式文件,因此,只需要在 app.wxa 中引入,即可确保所有页面都可以正常使用 tailwindcss
@import "./tailwind.wxss"
Code language: JavaScript (javascript)实际上,taildwindcss 的体积还可以进一步优化,你可以完全移除掉那些你没有用到的属性,从而让你的 css 文件特别小,从而控制小程序样式的大小。

一直以来,我都没有使用过 Mixins 这个功能,因为一直以来,我都会倾向于在不同的页面承载不同的功能。
但最近在做 NESHouse Pro 的时候,也确实遇见单个页面承载了大量的逻辑,因此,我决定使用 Mixins 来分割逻辑。

我将页面的逻辑和功能按照模块,拆分成了三个不同的 mixins。之所以这样拆分,是因为这三个模块都有一些跟随函数的变量,我不希望这些变量出现在主要的页面逻辑中,而是以抽象出函数的方式来调用,因此,通过 Mixins 来组合 Methods 和 Data 是一个不错的方式。