Node CLI工具原理解析(1)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 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

相关文章
|
1月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
41 3
|
19天前
|
安全 程序员 API
|
13天前
|
自然语言处理 并行计算 数据可视化
免费开源法律文档比对工具:技术解析与应用
这款免费开源的法律文档比对工具,利用先进的文本分析和自然语言处理技术,实现高效、精准的文档比对。核心功能包括文本差异检测、多格式支持、语义分析、批量处理及用户友好的可视化界面,广泛适用于法律行业的各类场景。
|
20天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
32 1
|
25天前
|
数据采集 存储 编解码
一份简明的 Base64 原理解析
Base64 编码器的原理,其实很简单,花一点点时间学会它,你就又消除了一个知识盲点。
67 3
|
7天前
|
存储 供应链 物联网
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景
|
7天前
|
存储 供应链 安全
深度解析区块链技术的核心原理与应用前景
深度解析区块链技术的核心原理与应用前景
15 0
|
22天前
|
供应链 安全 分布式数据库
探索区块链技术:从原理到应用的全面解析
【10月更文挑战第22天】 本文旨在深入浅出地探讨区块链技术,一种近年来引起广泛关注的分布式账本技术。我们将从区块链的基本概念入手,逐步深入到其工作原理、关键技术特点以及在金融、供应链管理等多个领域的实际应用案例。通过这篇文章,读者不仅能够理解区块链技术的核心价值和潜力,还能获得关于如何评估和选择适合自己需求的区块链解决方案的实用建议。
37 0
|
1月前
|
存储 前端开发 JavaScript
前端模块化打包工具的深度解析
【10月更文挑战第13天】前端模块化打包工具的深度解析
|
1月前
|
前端开发 JavaScript UED
axios取消请求CancelToken的原理解析及用法示例
axios取消请求CancelToken的原理解析及用法示例
94 0

推荐镜像

更多