使用Termux将安卓变身为Linux
最近想着在手机上运行一些node服务,这样不仅可以解放出电脑,还可以充分利用手机的性能,毕竟现在的手机CPU已经够强了,什么骁龙835,麒麟970,现在的骁龙845主频都达到了2.8GHz,完全可以用于开发部署一些服务程序,于是网上找到了这个神器:Termux。
Termux截图
Termux本身是个运行在安卓上的apk,需要下载安装,网上也有很多教程,具体就不多说了 。 由于Termux的可操作范围是在 /data/data/com.termux 下,而没有root权限的手机是访问不了这个路径的,我用的小米5刷了开发版并获获取了root权限,可以在手机上操作这里边的文件。不过这倒不影响我们后期操作,因为我们要用ssh+sftp的形式进行命令行与文件操作,Termux只支持**形式的ssh访问,网上也有教程,登陆上就可以在电脑上操作了,基本跟访问Linux系统的机器一样。
接下来就要安装node了,termux提供的apt命令可以直接安装,真的强,apt install node
,安装完运行node -v
-> 8.11.2,npm -v
-> 5.6.0,版本还挺新,package维护挺好。
然后就要建立我们的项目文件夹,将我们要部署的文件放进去,我在Windows用的是winSCP这个软件,很好用,连接后可以直接在Windows上编辑保存,然后自动同步。在项目文件夹下运行npm install
安装依赖。这里我的npm运行总是要等一会才执行,而且还要在不息屏的情况下才运行,可能是手机的后台管理限制吧。可到了这里就出现了一个大问题,npm竟然报错了。找到报错的log,问题如下:
info it worked if it ends with ok
1 verbose cli [ '/data/data/com.termux/files/usr/bin/node',
1 verbose cli '/data/data/com.termux/files/usr/bin/npm',
1 verbose cli 'install',
1 verbose cli 'express',
1 verbose cli '--save' ]
2 info using [email protected]
3 info using [email protected]
4 verbose npm-session c8eac10251e7bad4
5 verbose stack TypeError: Cannot read property 'length' of undefined
5 verbose stack at Object.<anonymous> (/data/data/com.termux/files/usr/lib/node_modules/npm/node_modules/worker-farm/lib/farm.js:5:61)
5 verbose stack at Module._compile (module.js:652:30)
5 verbose stack at Object.Module._extensions..js (module.js:663:10)
5 verbose stack at Module.load (module.js:565:32)
问题定位到/data/data/com.termux/files/usr/lib/node_modules/npm/node_modules/worker-farm/lib/farm.js这个js的第5行,看一下吧,原来是引用os模块导致的,写了啥?这个:require('os').cpus().length
,我单独执行了下这个require(‘os’).cups(),确实获取不到东西,返回undefined,算了,毕竟是手机,系统总会和pc有出入,获取不到就写个1替换掉吧。于是乎npm命令就好使了。好了,最后运行我的项目,node go,nice!