Node CLI工具原理解析(1)

简介: 前言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

相关文章
|
4天前
|
Web App开发 JavaScript 前端开发
浏览器与Node.js事件循环:异同点及工作原理
浏览器与Node.js事件循环:异同点及工作原理
|
4天前
|
负载均衡 算法
Dubbo-负载均衡原理解析(1),一个本科渣渣是怎么逆袭从咸鱼到Offer收割机的
Dubbo-负载均衡原理解析(1),一个本科渣渣是怎么逆袭从咸鱼到Offer收割机的
|
4天前
|
Android开发
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
Flutter完整开发实战详解(六、 深入Widget原理),2024百度Android岗面试真题收录解析
|
5天前
|
Web App开发 开发框架 前端开发
Open UI5 前端开发框架配套的 Mock Server 工作原理解析
Open UI5 前端开发框架配套的 Mock Server 工作原理解析
11 0
|
5天前
|
存储 Java Go
Go 语言切片如何扩容?(全面解析原理和过程)
Go 语言切片如何扩容?(全面解析原理和过程)
14 2
|
5天前
|
机器学习/深度学习 存储 算法
卷积神经网络(CNN)的数学原理解析
卷积神经网络(CNN)的数学原理解析
34 1
卷积神经网络(CNN)的数学原理解析
|
5天前
|
传感器 数据采集 存储
岩土工程监测仪器之一:振弦采集仪的工作原理解析
岩土工程监测仪器之一:振弦采集仪的工作原理解析
岩土工程监测仪器之一:振弦采集仪的工作原理解析
|
5天前
|
人工智能 自然语言处理 机器人
销售利器大集结:13种智能销售工具全面解析
该文探讨了人工智能在销售领域的应用,测试了13款领先工具,如Zoho CRM、Email Subject Line Generator和ChatGPT Plus等,这些工具通过数据分析、自动化任务和智能交互提升销售效率。然而,使用AI也带来人机交互和数据安全的挑战。文章强调,结合人工智能和人类销售人员的优势是关键,同时应谨慎处理相关问题。
26 4
|
5天前
|
XML JavaScript 数据格式
Beautiful Soup 库的工作原理基于解析器和 DOM(文档对象模型)树的概念
【5月更文挑战第10天】Beautiful Soup 使用解析器(如 html.parser, lxml, html5lib)解析HTML/XML文档,构建DOM树。它提供方法查询和操作DOM,如find(), find_all()查找元素,get_text(), get()提取信息。还能修改DOM,添加、修改或删除元素,并通过prettify()输出格式化字符串。它是处理网页数据的利器,尤其在处理不规则结构时。
38 2
|
5天前
|
机器学习/深度学习 人工智能 数据可视化
号称能打败MLP的KAN到底行不行?数学核心原理全面解析
Kolmogorov-Arnold Networks (KANs) 是一种新型神经网络架构,挑战了多层感知器(mlp)的基础,通过在权重而非节点上使用可学习的激活函数(如b样条),提高了准确性和可解释性。KANs利用Kolmogorov-Arnold表示定理,将复杂函数分解为简单函数的组合,简化了神经网络的近似过程。与mlp相比,KAN在参数量较少的情况下能达到类似或更好的性能,并能直观地可视化,增强了模型的可解释性。尽管仍需更多研究验证其优势,KAN为深度学习领域带来了新的思路。
118 5

推荐镜像

更多