Alex-Programer

Alex-Programer

随缘博客,不定期更新不确定的内容~
github
twitter

命令行別名

image

前言#

在命令行中,只需输入s,即可运行与yarn start或其他命令等效的效果,这将是一种很棒的体验,特别是对于经常使用的命令。

Windows 别名配置#

创建一个alias.bat文件#

doskey s = yarn start

配置注册表#

  • 使用win + r打开运行窗口,输入regedit打开注册表
  • 使用ctrl + f搜索Command Processor
  • Command Processor下,新建 => 字符串值
  • 将数值名称设置为 AutoRun,将数值数据设置为alias.bat的绝对路径

设置完成后,重新启动命令行窗口即可生效。之后每次需要调整命令时,只需在alias.bat文件中进行处理。

扩展#

调用多个命令#

例如,一键执行push操作

doskey c = git add . $t git commit -m "update" $t git push

查看配置#

使用doskey /macros可以列出已配置的快捷指令。如果觉得麻烦,可以定义一个command指令来辅助记忆

doskey command = doskey /macros

传递一个参数#

假设设置一个n指向node的快捷指令,想要通过n -v来查询node的版本号并实现参数传递,可以这样定义

doskey n = node $*

传递多个参数#

在上面传递一个参数的示例中,$*表示传递n后面的所有参数。还可以通过$1$2等方式来定义形参。例如定义一个v的指令,通过v -v -v可以同时查看npmnode的版本号,也可以根据需要传递其他参数。

doskey v = npm $1 $t node $2

Linux/Mac 别名配置#

打开或新建~/.zshrc文件#

alias s="nr start"

设置完成后,使用source ~/.zshrc更新文件即可生效。之后每次需要调整命令时,只需在~/.zshrc文件中进行处理,并记得要进行一次source操作。

注意:

  1. 如果是bash类型的终端,则使用~/.bash_profile文件
  2. 在 Mac 中,别名配置的语法稍微严格一些,例如 “=” 的前后不能有空格

扩展#

调用多个命令#

alias v="npm -v && node -v"

传递参数#

alias不支持传递参数,需要使用函数来处理。配置完成后,batchParams -v -v将分别打印出npmnode的版本号。

batchParams() {
  npm "$1"
  node "$2"
}

更优雅的方式#

在处理 Windows 的别名配置时,每次启动终端时都会重新执行注册指令,这看起来不够优雅。可以编写一个 Node.js 的 CLI 工具来改进。

自定义命令#

首先运行一个i命令,表示npm install。创建一个名为cli的目录,并初始化package.json,然后定义如下代码:

{
  // ...
  "bin": {
    "i": "./lib/install.js"
  }
  // ...
}

./lib/install.js

#!/usr/bin/env node

const { spawn } = require("child_process");

// 执行npm install,配置stdio: "inherit"以继承并显示npm install命令运行时的行为,例如打印的日志
spawn("npm", "install", { stdio: "inherit" });

命令增强#

使用@antfu/ni来运行

spawn("ni", "", { stdio: "inherit" })

它会自动识别项目需要使用哪个包管理器,并进行安装。

开源分享#

如果经常在 Windows 和 Mac 之间切换工作环境,编写这样一个工具将非常方便。我自己也编写了一个类似的工具,目前具备以下功能:

  • i => ni【安装依赖】
  • b => nr build【打包】
  • e => nr e2e【运行 e2e 测试】
  • t => nr test【运行单元测试】
  • s => nr start【或者 nr dev,优先运行 dev】
  • copen 仓库地址 => 克隆仓库后立即用 VS Code 打开
  • cbranch => 清除所有远程仓库中不存在的本地分支

有兴趣的小伙伴可以 fork 过去自己玩哦。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。