使用Automator打造NodeJS依赖包的懒人安装应用

最近在帮隔壁QA组写一点UI自动化测试的东西,也是折腾了很多之前没有时间搞的东西。比如:

我们有一个NodeJS的包,是内网库里的。QA Manager给组员写了一个带截图的诚意满满的Guide Doc,然而组员们(基本都不怎么会coding)并不买账,说太复杂了。她(QAM)就很头疼。

我拿来一看,确实有点……毕竟要先装node,然后node -v看版本确认安装,然后set一个registery,装完还要在命令行里用。对于一个Terminal是啥都不知道的人来说,确实…麻烦了点。

于是我就写了一个sh脚本给她。大概是:

nodepath=$(which node)

if [ -n $nodepath ]; then
    echo $nodepath
else
    echo 'You dont have node installed on your laptop\n'
    echo 'Start installing node on your laptop\n'
    curl "https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"
fi

node -v

npm config set registry https://npm.someurl.com/

npm i -g @namespace/package

npm config delete registry

写完后,直接打开Terminal,cd到这个目录,sh之即可。

然而这样还是有问题,因为用户是真的不会,于是QA Manager就像,要是能用个APP一键搞定就好了啊!

讲道理,其实可以。


我的思路是:

写一个Automator,利用Run Shell Script这个方法来运行shell 脚本

然而问题来了,Automator的脚本里,不支持node这个命令,估计是加了安全性保护。随后再试验,Shell脚本也不能用。走不通了。

于是我转而使用Apple Script去实现。先写个测试看看有没有安全限制,蛮简单。

Tell Application "Terminal"

do script("sh ~/test.sh")

end tell

没问题。

但是要生成一个sh,再echo进去,再run太复杂了,还有多重的引号转译。

于是我改为用Automator运行AppleScript脚本,用AS脚本来驱动sh——

成功。

下一步就要看怎么把sh的内容扔到一个文件里了。这倒是也不难,因为写文件这种级别的操作还是没啥问题的。

于是,最终成果如下:

使用Automator打造NodeJS依赖包的懒人安装应用_第1张图片

最后只需要导出一个.app即可。

最终的效果就是,QA的同学,双击这个APP,自动生成一个sh文件,写入目标script,使用AS去执行之,然后删掉sh临时文件。

大功告成。


另外,set registry之后删除是个不好的行为,可以用npm i xxx -registry xxx来代替。

你可能感兴趣的:(使用Automator打造NodeJS依赖包的懒人安装应用)