分类 默认分类 下的文章

写在前面
前几个月在公司用vue3和ts写项目,想巩固一下基础,于是我想起了去年基于JavaScript和Jest搭建的刷题环境,不如,给它搞个加强版,结合Typescript和Jest 搞一个刷题环境,下面是我的一些使用心得,分享给大家。

介绍
Typescript是JavaScript的超集,是前端工程师需要掌握的一门语言。Jest是一个测试框架,具体的可以看我早年写的文章https://www.cnblogs.com/cnroadbridge/p/13524099.html, Babel是一个语言编译器,具体的也可以看我早年写的文章https://www.cnblogs.com/cnroadbridge/p/13311360.html

环境搭建
前期工作
这里统一用yarn 来进行相关的npm 包安装与维护,使用其他安装管理工具的参照着这个改吧。

创建项目并初始化
mkdir coding-ts && cd coding-ts
npm init -y
安装ts的开发环境依赖
yarn add typescript ts-node @types/node -D
配置tsconfig.json

需求
最近遇到一个问题,就是用到了scp这个命令,然后每次拷贝文件到新的服务器都好烦啊,想着能不能不要输密码了,所以就有了今天的文章。

解决方案
讲本地ssh生成的公钥拷贝到需要登录的服务器,具体的步骤如下:

生成秘钥

ssh-keygen -t rsa

拷贝到服务器192.168.0.51

scp ~/.ssh/id_rsa.pub root@192.168.0.51:/root/.ssh/authorized_keys

拷贝到服务器192.168.0.45

scp ~/.ssh/id_rsa.pub root@192.168.0.45:/root/.ssh/authorized_keys
执行完楼上的就不用再输入密码了。

写在前面
嗨,大家好,我是江涛同志,今天跟大家分享的是程序员转业的故事和想法。由于国内内卷的就业环境,“996是福报”的恶魔😈理论,加之对大龄程序员的就业不友好,特别是遇到例如疫情、金融危机、公司财务状况不佳的时候,就可能爆发裁员之类的事情(这个笔者亲身经历过一次,2020年6月入职兔狗科技,7月因为公司业务不行被暴力裁员,是的社会就是这么残酷,当它抛弃你的时候,的确不会说再见的,这对笔者职业生涯造成了毁灭性的打击,心中的阴影挥之不去),居安思危,就引出了今天的话题,有一天,我不做程序员了,我还能干啥? 这个问题是个开放性的答案,说啥都对,但是在很多解里面寻找一个适合自己的最优解,这是我们后面要做的事。我今天的观点是,程序员转业做文员,有一定的优势。

背景故事
最近,有朋友在微信求助涛哥,大致的需求是有一个excel里面有若干个sheet,需要根据其中的一个sheet中的Device Sub ID去进行分类合并到新的按照Device Sub ID命名的sheet里面, 并将其扁平化输出。
1.jpg2.jpg
这里通过找规律,我发现按照时间的顺序,10个为一组追加对应的id和时间并且扁平化的输出到对应的sheet是可以试试写写看的。

这里一共有43144行,假如以工具人的视角,在不考虑人机疲劳的情况下,这位选手处理一条完成的记录需要12秒,那么其大概需要12个小时左右完成这项任务,但是当你以编程的视角去审视这个问题,几秒钟就可以跑出一个我们想要的结果,而且答案是比自己一个个去复制粘贴不容易出错的,这就是我今天想举的一个例子。麻烦社会上的好心的叔叔阿姨大伯大婶,如果你们缺文员,可以考虑一下年龄大的老程序员,他们在处理数据方面,有着得天独厚的优势,谢谢!

写在前面
本文大致向读者介绍了楼下几点知识,希望在编写bat脚本时候能够帮到读者,如果能够有所启迪,那就更好了。

bat脚本的相关知识和案例编写
用windows自带的命令压缩文件
windows和linux文件传输
如何免密码登录Linux
前端发布流程的优化
背景介绍
笔者目前所在的开发团队,由于一些限制,没有相关的devOps实践,所以也就没持续集成、自动部署什么事了。很多时候,还是依靠人力手动挡操控,先运行诸如yarn build或者npm run build之类的npm script去构建相关的前端项目,然后选中dist文件夹,进行相关的压缩,差一点的就直接命名dist.zip好一点的就带上个时间方便回溯,比如app-202206012002.zip这种,然后打开相关的ftp工具,把压缩好的包传到远程服务器上,最后在服务器上解压,放到nginx指定的html目录下,这一趟发版就算是齐活了。

这种模式比如就一个项目,那你要是能够接受,时间也够充裕那就这么搞吧,也无可厚非的。但是要是有好多个这种项目这么搞,真让人呕吐🤮啊,好tm恶心啊,程序员本身在做的一件事情,应该是把一件繁琐的或者说是复杂的事情简单化,而不是随波逐流,任由事情变得越来越复杂、以致到了最后不可控,那就太鸡肋了。

Larry Wall(拉里 · 沃尔)曾经说过程序员的三大美德:懒惰,急切,傲慢(laziness, impatience, hubris)。楼上的做法显然不是很尊重(懒惰)美德啊,于是我开始蠢蠢欲动地构思颠覆楼上的发布模式。

我物色到了好几位选手,一位是bat选手,一位是cmd选手,还有js选手,py选手等等,经过相关的权衡,我最终选择编写bat(批处理)来解决楼上的问题。

我为什么相中bat选手来解决楼上的问题?
第一个就是,我们在解决当前问题的时候,尽量不要引入一些新事物去增加问题本身的复杂度,基于楼上这件事本身就是敲敲命令行(包括你说压缩、上传,本质上不就是一条命令嘛),所以js选手、py选手pass。第二个就是,我们尽量要做的兼容性足够好,bat和cmd用起来其实都差不多的,但你一定要深究它们,我理了下它们的区别大致是这样子的

bat(ms dos批处理脚本)基于dos设计,更通用一点
cmd(windows nt命令脚本)只能在windows2000以上系统运行,但是命令丰富
所以综上所述,我最后选择编写一个dos批处理脚本来解决楼上的问题。

有哪些人机交互的方案可以实现?
方案一:当用户运行相关bat脚本的时候,可以让用户输入对应的项目名称,然后去匹配对应的项目,再执行构建命令,然后执行压缩命令,再上传到linux服务器
方案二:考虑到项目有可能很长,为了优化用户体验,现在统一让用户输入数字,执行相关的逻辑,比如1、执行app项目构建,2、执行biz项目构建,3、执行app和biz项目构建,然后在进行相关的压缩上传操作。
把项目的粒度放到子项目中去,比如NoteWeb下面有app,biz,fin三个子项目,每个子项目写一个构建脚本,在父项目中,写的着急一点就无脑构建,每个项目都run一把,当然你也可以参考楼上的方案一、二做相应的优化
bat脚本知识科普
@echo off 关闭回显
setlocal enabledelayedexpansion 设置延迟变量
@REM 用来写注释的
chcp 65001 使用utf-8编码,这样中文就不会乱码了,
cls 清屏
cd /D %~dp0 进入当前目录
echo 这个是用来输出的
color 0A 设置文字显示的颜色是 一抹“原谅色”
set /p input_source= 讲输入的值赋值给变量input_source
以上列举的是常用的bat脚本知识,具体的建议读者阅读帮助文档来进行了解相关的命令,这里就不再赘述。

deploy.bat脚本的编写
如何实现数字菜单?
这里的思路是让用户输入对应的数字,然后讲参数传给execBuild方法执行相关的逻辑(构建打包,压缩,上传)

@echo off
setlocal enabledelayedexpansion
color 0A
@REM 中电汇融项目构建脚本,Zheng JiangTao(jiangt.zheng@sunyard.com)
chcp 65001
cls
cd /D %~dp0
echo ==========(∩•̀ω•́)⊃-⋆中电汇融项目构建脚本⋆-⊂(•̀ω•́∩)==========
:start
echo 中电汇融项目数字菜单:
echo 【1】app, 【2】biz, 【3】fin
echo.
echo 【4】app、biz, 【5】app、fin
echo.
echo 【6】biz、fin,【7】app、biz、fin,
echo.
echo 【0】退出
echo.
echo 请按提示输入相应的数字进行相关的项目构建操作:
set /p input_source=
if !input_source!== 0 ( echo 退出成功 )
if !input_source!== 1 ( call :execBuild app )
if !input_source!== 2 ( call :execBuild biz )
if !input_source!== 3 ( call :execBuild fin )
if !input_source!== 4 ( call :execBuild app,biz )
if !input_source!== 5 ( call :execBuild app,fin )
if !input_source!== 6 ( call :execBuild biz,fin )
if !input_source!== 7 ( call :execBuild app,biz,fin )

echo ========:ஐ٩(๑´ᵕ)۶ஐ:*中电汇融项目构建脚本*:ஐ٩(๑´ᵕ)۶ஐ:========
:finish
exit /b
如何实现打包文件压缩?
市面上常见的压缩软件有winRar、7-Zip等等,一个思路是设置对应安装的软件的bin目录到环境变量,然后去查阅对应的API,执行相关的打包压缩命令,但是问题就来了,你哪能知道用户装的是winRar还是7-Zip,还是360压缩呢,所以你就需要写一个兼容的方法来抹平这个问题,先去查找有没有对应的文件目录,有的话添加到环境变量,然后执行对应的压缩命令,这样子很繁琐,万一它一个也没有装呢?而且也违背了上面说的(懒惰)美德。

所以在这里,我们试图通过windows自身的一些方法去压缩文件,皇天不负赶路人,我在csdn上看到一篇帖子https://blog.csdn.net/d_r_l_t/article/details/100584748,于是我摸着这位大哥的文件压缩过河,具体的读者可以点开阅读下,我这里就不再赘述了。

创建一个zip.vbs脚本

背景介绍
随着人类地发展,社会地进步,计算机技术地更新迭代,每一片码海里都有它宝贵的财富,每一座码山里都有着各自的秘密。怎么守住财富,隐藏一些秘密,成了一些开发人员所关心的事情。

需求分析
简单地说,有这样一个需求,我期望在项目中引入一个模块,这个模块我又不高兴给一些无关的人员看到,想想办法,我调研了下有这么些可行的办法。

结合cnpm,搭建npm私有仓库

用Nexus管包,同时JAVA、Go等等语言的包它也可以管

用Verdaccio搞一下

用GitHub、gitlab之类的仓库作为代码包引入

今天我们着重介绍用GitHub、gitlab之类的仓库作为代码包引入,文中是以gitlab为例。

以utils包为例,把它搞私有
如图所示,我们基于gitlab创建一个通用工具包项目-utils,这里因为我所在的这个环境它需要连接华为的VPN才可以访问,所有我就给它public了,如果说你是公网的一个环境,那我建议你选private。

在创建完项目以后呢,你把它克到你本地, 然后执行npm init命令进行项目初始化工作,具体的你可以看下下面截图,对应着改改package name,description,等等属性。

这里插一个git知识点啊,你是不是觉得每次提交输入账号密码很烦呢,那其实你也可以配置下ssh,具体的操作如下(以windows为例),WIN+R输入cmd然后执行ssh-keygen -o -t rsa -b 4096 -C "你的git仓库邮箱",然后就是一路回车,执行cat ~/.ssh/gitlab/id_rsa.pub | clip命令去拷贝生成的公钥(这里我选的不是默认地址,如果你是一路回车的话,应该是这个地址~/.ssh/id_rsa.pub)

具体的步骤我记录了下,你可以参考下(额,已经做模糊化处理,邮箱瞎写的)

PS D:gitlabbase> ssh-keygen -o -t rsa -b 4096 -C "admin@w3c.org"
Generating public/private rsa key pair.
Enter file in which to save the key (C:Usersataola/.ssh/id_rsa): C:Usersataola/.ssh/gitlab/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:Usersataola/.ssh/gitlab/id_rsa.
Your public key has been saved in C:Usersataola/.ssh/gitlab/id_rsa.pub.
The key fingerprint is:
SHA256:L4+LRA/YbDiVhwZ4EPNczFmwFPUiKUkYR3MCe6xaGNs admin@w3c.org
The key's randomart image is:
+---[RSA 4096]----+
| OBo*o |
| oO.O+= . |
|. ..B O o . |
| = o O o . |
|o E + * S |
| o + o . |
|. . o . |
| . . + |
| . o.. |
+----[SHA256]-----+
PS D:gitlabbase>

cat ~/.ssh/gitlab/id_rsa.pub | clip
把对应的公钥拷贝到剪贴板以后呢,去gitlab的user settings下的SSH Keys下面粘贴一下,如下图所示。