0%

在vscode上安装labuladong插件

故事发生在一个略微轻松的下午–论文上的事情在等待下一步指示,项目上的事在等待对接的人。

于是我想起了同学推荐我的labuladong插件,这个插件能用来刷一些小编程题目,温习树、链表等等数据结构,也能巩固动态规划、贪心等常用算法。这些都算是基本功吧,平时不搞搞,哪天突然用到了只能心虚了。本科时候学的C++程序设计和算法,也参加过一些小的程序设计竞赛,都用的是C++。虽然现在的深度学习项目主用python,但感觉落实到底层还是(或许)得熟悉C++。为了不忘记C++这个高效的语言,将来某一天要用的时候能够直接上手不心虚,我决定平时带着写写C++的编程小题目。

之前他还推荐我使用Bing的免费AI对话,我搜了教程,发现现在只能在Edge的开发者版本上可以免费使用了。顺带着我还发现这个开发者版本的Edge和平常用的不一样,它有linux版的。这意味着在linux也是能用微软家浏览器的了!之前呢,我以为同时支持windows、linux、安卓三个主流操作系统的只有火狐和谷歌。谷歌默认谷歌搜索引擎,有时不太方便,所以我一直很喜欢火狐。总之,Edge开发版本再次让我意识到了跨设备是未来的趋势,是良好的美德。

我很喜欢火狐,我已经习惯性的把所有重要的网页都收藏在火狐上了。可是labuladong在火狐上并没有扩展。这意味着要使用这个扩展,还得用Edge?可是我已经在各个设备上主用火狐了,我也不想在实验室电脑的ubuntu上再装一个Edge了…偶然间我发现labuladong也有vscode的插件。vscode我熟悉呀!vscode就是我最爱的IDE,它和火狐一样都是跨设备多终端同步的典范!于是我打算在vscode上安装labuladong插件,以此免除对Edge的依赖。而AI对话有更多的平替,这个也无须用Edge。

第一回:如何在没有管理员权限的服务器上安装node.js

labuladong插件依赖node.js

其实“安装”这个词,容易让人产生误解,以为它是个很复杂的动作。特别是早期,我们都使用windows,一般安装某某软件就是个复杂的过程,有的时候还得去搜教程和攻略,这件事的根源在于,windows是黑箱一样的操作系统,是傻瓜式的图形操作界面,且面向的用户都是不懂系统和电脑的普罗大众。这就导致我们在使用windows的时候,不会多动脑筋去思考“安装”到底是在做什么事情。更有很多端正复杂的“安装向导”程序,先给我们展示一大段看不懂的“协议”,再引导我们一步一步安装,让我们觉得这个过程相当复杂和神圣,“不要去细想它里面做的事了,一定是很复杂的”。

也有些软件在暗示我们,安装其实不是(需要)这么复杂的。例如,我们一定见过很多“绿色版”软件,从别人那里拷贝过来,点开就能运行。我的理解是,这种绿色版软件就相当于我们自己平时写的那种代码,包含了所有重要的功能,但是未曾向系统注册(表明自己的存在)。这种绿色版软件,实际上就是跳过了向系统注册等等windows上复杂的“安装”流程,直接以可执行程序的形式存在着。它未注册,因而像黑户一样,系统不知道它的存在;但是它确确实实有着完整的功能,往那一放就可以用,不想时卸载就行。

使用linux之后,把某个软件或包的路径”写入系统路径“,是经常要做的事情。这其实就是linux上的”安装“了,等价于windows上向系统”注册“、写入系统变量等过程。网上的很多教程,在说到安装某款软件的时候,常常会让使用sudo apt install xxx命令。这让我们觉得,似乎这就是标准的“安装”过程。实际上并不是的。首先,apt只是一个云端的软件仓库,它收藏了常用的软件。这条命令最大的作用是从云端下载软件的过程,下载之后将软件的配置、可执行文件等分门别类地放到系统不同位置。而sudo其实不是必须的,它之所以经常出现,是因为这条命令可能改变对系统来说很重要的某个软件包,让系统轰然倒塌,所以一般只有管理员才能使用。

但实验室的服务器通常是大家共用的,无法使用sudo apt命令直接从仓库安装某个软件。此时,要注意的是,linux上安装某个软件其实非常简单,不需要使用sudo apt install xxx命令。

第一步,下载这个包到某个位置,例如可以这样直接下载node.js:
curl https://nodejs.org/dist/v20.5.1/node-v20.5.1-linux-x64.tar.xz

下载之后,解压,能看到一个文件夹里包含了所有你需要的nodejs相关文件。这个时候cd到这个文件夹中的bin文件夹中,执行这样一个命令:

1
2
3
4
5
(base) jxl@vostro-5090-china-hdd-protection:~/下载/node-v20.5.1-linux-x64/bin$ ./node
Welcome to Node.js v20.5.1.
Type ".help" for more information.
>

可以看到当前的这个node俨然就是一个完美的可执行文件了。然而这样并没有结束,在系统的其他位置执行node,会提示你没有”node”这个东西。

1
2
3
(base) jxl@vostro-5090-china-hdd-protection:~$ node
Command 'node' not found, but can be installed with:
sudo apt install nodejs

这就是我们之前说的“将软件的路径添加到系统路径里”的事情了。随手下载的软件只有你当时知道它的存在,在系统看来就是个黑户,在系统中的其他软件看来更是如此。
此时,把可执行文件的路径加到系统路径即可。先vi ~/.bashrc,把export PATH="$PATH:/data/jixinlong/jixinlong/node-v20.5.1-linux-x64/bin"这样一句加到最后。.bashrc是当前用户每次登陆时会自动执行的脚本,而export PATH="$PATH:/data/jixinlong/jixinlong/node-v20.5.1-linux-x64/bin"表示给PATH这个系统变量赋值为旧值$PATH后面加上/data/jixinlong/jixinlong/node-v20.5.1-linux-x64/bin

然后执行source ~/.bashrc让这个脚本立刻生效,而不必等到用户下次登陆再生效。
此时,在系统任何位置执行node命令,都会显示node存在:

1
2
3
4
(base) jixinlong@ubun:~/Illumination-Estimation-1/SHGLight$ node
Welcome to Node.js v20.5.1.
Type ".help" for more information.
>

第二回:labuladong为什么登陆不上

千辛万苦,想清了平头百姓装node一事;万苦千辛,网断了labuladong如何登陆得上!

其实有些事情早有伏笔,只是当时未能想到这一层。学校的校园网一次性只能有四个ip登陆,而中午的时候我可能登陆了太多设备,把之前连着校园网的服务器弄断网了。实验室的服务器上有一天执行一次的自动联网脚本,所以我从来不会去关注它网络的状况。

还有个比较狗的事情,就是实验室的服务器,即时不自己去联网,也会有一个比较慢速的网。这个网在我安装labuladong插件的时候完全够用,可是我进一步在插件里登陆leetcode账号的时候,却完全不够用了。能成功下载插件,麻痹我,让我意识不到网络有问题。等到我折腾两个小时都登陆不上leetcode账号,尝试各种方法都不行时,偶然看了一眼内网穿透等服务的log,发现网络似乎在最近几个小时不对劲。然后我再试着curl www.baidu.com检查一下网络状态,发现拉出了个10.0.0.58的校园网登陆界面,才发现滑天下之大稽,自己竟然和断网的插件斗争了两个小时。

给服务器手动连了校园网,再次尝试登陆leetcode账号。丝滑登陆,畅通无阻,热泪盈眶。事了拂衣去,深藏功与名。

后记

其实node用nvm安装也很方便,也不需要管理员权限。同时还能支持对不同node版本的切换使用。
nvm之于node,就好像conda之于python,就好像java的一个版本管理器之于java…真是优美的管理者们。