Node CLI工具原理解析(1)

本文涉及的产品
云解析DNS,个人版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 前言CLI(Command-Line Interface) 命令行界面搞开发的同学,或多或少的都会接触到许多的命令行工具。有生产力工具,也有有意思的小玩意、自动化任务处理等等。命令行工具的安装方式就很多了。

前言

CLI(Command-Line Interface) 命令行界面

搞开发的同学,或多或少的都会接触到许多的命令行工具。

有生产力工具,也有有意思的小玩意、自动化任务处理等等。

命令行工具的安装方式就很多了。

win上大部分是通过软件安装包安装,安装同时会通过环境变量配置相关指令。

linuxmac上就比较丰富了,前者常用yumapi-get、mac 上就brew

也有使用wgetcurl拉取相关工具的shell脚本执行安装。

说了这么多工具,都不是本文要讲的工具,前端搬砖当然首选node,然后基于npm做包的分发。

PS:文中的示例都以mac为主

可执行shell

unix系上大部分可执行文件都是基于shell的脚本。

比如随手写个hello world

文件名hello,内容如下

echo "Hello world"

此时我们直接执行是会提醒没有执行权限,我们为当前用户加1个可执行权限

chmod u+x hello

然后再当前目录执行,就看到输出结果了

./hello

image.png

注册全局指令

为了使“指令”在全局任意位置都能被使用,就需要做相关操作了。

环境变量

相信大多数首次接触这个词的朋友都在windows上深有体会。装JDKMySQL时都避免不了有配置的操作。

如果想在其它目录直接执行hello就生效呢?那这就离不开环境变量配置了

mac上配置文件区别于使用的shell执行工具

咱们先看终端用的shell工具是什么。


echo $0

我这里使用的是zsh,其它的常见的还有bash

image.png

相应的配置文件分别是.zshrc.bashrc

image.png

alias指令

使用 alias指令设置别名

指令格式

alias <别名>=<指令或可执行文件路径>

添加内容如下

alias hello=/Users/sugar/Documents/diy-cli/hello

立即生效配置

source ~/.zshrc

export指令

使用export命令添加添加相关目录

指令格式

export PATH=$PATH:<路径 1>:<路径 2>:<路径 N>

添加内容如下

export PATH=$PATH:/Users/sugar/Documents/diy-cli

以上2种方案都能达到目标的效果

image.png

如果每个工具都单独配一条规则。那会导致相关配置文件非常的庞大,也不方便维护。

实际上我们在用npm i -g安装的全局包的时候,并没有手动配置。那么这个是如何做到的呢。这个就离不开下面将要说到的符号链接

符号链接

软链接类似于快捷方式,它可以指向任意文件系统中的一个文件或目录;硬链接也可以看作是文件或目录的快捷方式,但源文件删除了也不影响硬链接

先通过which npm看一下npm所在位置

打印一下$PATH的值,可以看到npm指令对应文件所在目录就在其中

image.png

展开目录内容可以看到文件类型都是l(软连接)

image.png

因此咱们可以小结出来 通过向已添加到$PATH变量中的目录,直接创建短链可以实现指令的自动注册全局

下面实践演示一下

ln指令

指令格式

# 硬链接
ln source target
# 软连接
ln -s source target

接着上面之前的例子,再使用export完成对目录的添加后。咱们再随便建立个文件hello2.sh进行操作

内容如下

echo "Hello world2"

创建一个软链

ln -s <source>/hello.sh <target>/hello2

操作结果如下

image.png

前面代码都是简单的写的shell脚本

前端当然是羧js,咱们把代码改成js。

hello.js

console.log('hello js')

结果可以预测是会报错的,默认会被当做shell脚本进行执行。

那么如何指定为使用node去执行这个文件?

这就是我们下文要说到的hashbang

Hashbang

Hashbang(也称为Shebang)是一个由井号和叹号构成的字符序列 #!,通常出现在文件开头,例如 #!/usr/bin/env bash

用于指定脚本的运行环境

于是,我们给前面的hello.js头部加上#!/usr/bin/env node 再次运行就成了

image.png

至此基本清楚了,如何将1个js脚本便捷的注册为1个全局可执行指令

Node CLI

node官配包管理工具npm,通常每个项目中有一个package.json文件,用于描述项目的一些信息或者包含项目相关的配置内容

指令注册

其中bin属性用于设置指令名称执行脚本所在位置

{
    "name":"pkgName",
    "bin": {
        "command": "exec/filepath.js"
    }
}

Node CLI工具原理解析(2):https://developer.aliyun.com/article/1394836?spm=a2c6h.13148508.setting.15.55964f0ez7IHhI

相关文章
|
12天前
|
设计模式 监控 Java
解析Spring Cloud中的断路器模式原理
解析Spring Cloud中的断路器模式原理
|
17天前
|
JSON 文字识别 数据格式
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
文本,文识11,解析OCR结果,paddOCR返回的数据,接口返回的数据有code,data,OCR返回是JSON的数据,得到JSON数据先安装依赖,Base64转换工具网站在21.14
|
23天前
|
存储 JSON NoSQL
深入解析MongoDB的存储原理
深入解析MongoDB的存储原理
深入解析MongoDB的存储原理
|
7天前
|
Unix Linux Shell
Sphinx是一个Python文档生成工具,它可以解析reStructuredText或Markdown格式的源代码注释,并生成多种输出格式,如HTML、LaTeX、PDF、ePub等。
Sphinx是一个Python文档生成工具,它可以解析reStructuredText或Markdown格式的源代码注释,并生成多种输出格式,如HTML、LaTeX、PDF、ePub等。
|
13天前
|
存储 Java 调度
解析Java中的线程池的工作原理
解析Java中的线程池的工作原理
|
17天前
|
JavaScript 数据安全/隐私保护
node.js 命令行的命令注册和配置工具(最新版) commander.js 实用教程(含自研脚手架的创建流程)
node.js 命令行的命令注册和配置工具(最新版) commander.js 实用教程(含自研脚手架的创建流程)
19 0
|
17天前
|
JavaScript 数据安全/隐私保护 索引
node.js 命令行交互工具(最新版) inquirer.js 实用教程
node.js 命令行交互工具(最新版) inquirer.js 实用教程
16 0
|
18天前
|
Ubuntu 网络协议
【ubuntu】DNS设置工具resolvectl安装教程
请注意,这些步骤可能会根据你的Ubuntu版本和配置有所不同。如果你在安装过程中遇到问题,可能需要查阅更具体的文档或者寻求专业的技术支持。
17 0
|
18天前
|
开发工具 数据安全/隐私保护 git
为了方便项目打包,我用Node写了个git-tag工具
为了方便项目打包,我用Node写了个git-tag工具
18 0
|
19天前
|
Cloud Native Java 开发者
深入解析Spring Framework的核心设计原理
深入解析Spring Framework的核心设计原理

推荐镜像

更多