Node CLI工具原理解析(1)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 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

相关文章
|
7天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
26 3
|
17天前
|
人工智能 JavaScript 数据可视化
Cursor 、v0 和 Bolt.new:当今 AI 编程工具的全面解析与对比
本文对 Cursor AI、v0 和 Bolt.new 三大 AI 编程工具进行了全面比较,分析其各自优势与局限性,帮助开发者在不同工作流中灵活应用。
131 8
Cursor 、v0 和 Bolt.new:当今 AI 编程工具的全面解析与对比
|
15天前
|
存储 JavaScript 前端开发
Node.js 常用工具
10月更文挑战第6天
12 2
|
16天前
|
开发框架 缓存 前端开发
electron-builder 解析:你了解其背后的构建原理吗?
本文首发于微信公众号“前端徐徐”,详细解析了 electron-builder 的工作原理。electron-builder 是一个专为整合前端项目与 Electron 应用的打包工具,负责管理依赖、生成配置文件及多平台构建。文章介绍了前端项目的构建流程、配置信息收集、依赖处理、asar 打包、附加资源准备、Electron 打包、代码签名、资源压缩、卸载程序生成、安装程序生成及最终安装包输出等环节。通过剖析 electron-builder 的原理,帮助开发者更好地理解和掌握跨端桌面应用的构建流程。
45 2
|
8天前
|
存储 前端开发 JavaScript
前端模块化打包工具的深度解析
【10月更文挑战第13天】前端模块化打包工具的深度解析
|
9天前
|
前端开发 JavaScript UED
axios取消请求CancelToken的原理解析及用法示例
axios取消请求CancelToken的原理解析及用法示例
33 0
|
9天前
|
JSON JavaScript 前端开发
深入解析ESLint配置:从入门到精通的全方位指南,精细调优你的代码质量保障工具
深入解析ESLint配置:从入门到精通的全方位指南,精细调优你的代码质量保障工具
37 0
|
9天前
|
缓存 资源调度 JavaScript
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
npx与npm的差异解析,以及包管理器yarn与Node版本管理工具nvm的使用方法详解
19 0
|
9天前
|
Web App开发 JavaScript 前端开发
Node.js:JavaScript世界的全能工具
Node.js:JavaScript世界的全能工具
|
12天前
|
存储 缓存 数据处理
深度解析:Hologres分布式存储引擎设计原理及其优化策略
【10月更文挑战第9天】在大数据时代,数据的规模和复杂性不断增加,这对数据库系统提出了更高的要求。传统的单机数据库难以应对海量数据处理的需求,而分布式数据库通过水平扩展提供了更好的解决方案。阿里云推出的Hologres是一个实时交互式分析服务,它结合了OLAP(在线分析处理)与OLTP(在线事务处理)的优势,能够在大规模数据集上提供低延迟的数据查询能力。本文将深入探讨Hologres分布式存储引擎的设计原理,并介绍一些关键的优化策略。
52 0

推荐镜像

更多