小情景
如何通过node在vscode及webstorm中打开文件?
求解过程
要想解决上面的问题,首先我们需要知道,除了双击程序图标之外,还有什么办法能打开vscode/webstorm一类的IDE软件?
如何在命令行中打开vscode、webstorm等ide?
办法是有的💡,那就是通过命令行来启动✌️
在Mac下使用命令行启动
使用命令行启动vscode
在Mac下打开你的命令终端,此时我们在放有代码的目录下,执行下面的指令,就可以在vscode中打开当前的文件目录
/usr/local/bin/code .
或者你可以直接在vscode中使用command+shift+p
组合键,输入shell command
在命令行中安装code命令即可,此时我们只要在命令终端键入下面的指令,可以实现同样的效果。
code .
使用命令行启动webstorm
在Mac下打开你的命令终端,此时我们在放有代码的目录下,执行下面的指令,就可以在webstorm中打开当前的文件目录
/usr/local/bin/webstorm .
或者按照下面的方法设置
此时我们只要在命令终端键入下面的指令,可以实现同样的效果。
webstorm .
说明
下面我们来解析一下上面的指令
① 其中/usr/local/bin
是启动器所在的路径,code是启动器,启动器可以理解为一种打开程序的快捷方式
② .
代表的是当前路径,如果你不希望打开当前路径,完全可以更换成其它的文件路径地址
如果我们添加了路径,则只要按照路径名称启动即可。
如何在node中打开vscode、webstorm等ide?
通过上面的代码,我们知道了在shell中键入特定的指令就能启动IDE,那么我们能不能通过node来执行shell指令呢?
答案是肯定的,我们此时需要node中child_process
模块的spawn
方法,这个方法可以帮助我们在node中执行shell指令
在开始之前我们先创建一个open-ide
文件夹,在这个文件夹下新建一个index.js
文件。
使用node启动vscode
我们在index.js
文件中写入下面的代码
const spawn = require('child_process').spawn; // ①
spawn('code', ['.']); // ②
在命令终端中,执行node index.js
指令运行代码,此时vscode按照预期被打开了。
①中的代码,我们引用了node中child_process
模块的spawn
方法。
②中我们执行了spawn方法,传入了两个参数,第一个参数是要运行的命令,第二个参数是字符串参数列表。
我们对比之前在shell中执行的指令code .
可以看到,spawn('code', ['.'])
等价于在shell中执行code .
。
如果我们希望打开特定文件中的某行某列怎么办?
答案是没问题,我们可以通过传入参数,来打开特定文件的特定行列 我们注释掉之前的代码,重新编写下面的代码
// const spawn = require('child_process').spawn; // ①
// spawn('code', ['.']); // ②
const spawn = require('child_process').spawn;
const fileName = 'index.js',
lineNumber = 7,
columnNumber = 3
spawn('code', ['-r', '-g', `${fileName}:${lineNumber}:${columnNumber}`]) // ③
在命令终端中,执行node index.js
指令运行代码,我们可以看到vscode打开了index.js
文件中的第7行,第3个字符位置
在③中,-r
参数表示的是在最近的一个vscode窗口中打开文件夹或者文件,-g
参数表示打开特定文件的特定行及该特定行中的特定字符位置。
如果希望查看更多参数的用法,可以点此官方文档传送门
使用node启动webstorm
根据上面vscode的经验,我们同样可以写出来打开特定行和特定列的代码:
// const spawn = require('child_process').spawn; // ①
// spawn('code', ['.']); // ②
const spawn = require('child_process').spawn;
const fileName = 'index.js',
lineNumber = 7,
columnNumber = 3
// spawn('code', ['-r', '-g', `${fileName}:${lineNumber}:${columnNumber}`]) // ③
spawn('webstorm', ['--line', lineNumber, fileName]); // ④
在④中,--line
参数规定了打开尾参文件特定的行数
在笔者实际测试过程中发现按照官方指导添加
--column
参数并不能生效,因此上面并未添加到定位到特定字符位置的代码
点击右侧👉查看webstorm相关的官方文档