执行 npm install eslint -g
当使用 npm 全局安装 eslint 的时候(使用命令 npm install -g eslint),npm 会从 npm 注册表下载 eslint 包及其所有依赖,并将它们放置在全局 node_modules 目录中。这个目录的具体位置根据操作系统和 npm 配置的不同而不同。
npm 处理 bin 属性
接下来,npm 查看 eslint 包的 package.json 文件。如果这个文件中包含了 bin 属性,npm 会根据 bin 属性指定的文件路径,在全局 bin 目录中创建指向这些文件的链接(或在 Windows 上是可执行的包装器)。bin 属性可以是一个文件路径的字符串,也可以是名称和路径对的对象,这取决于包提供了一个还是多个可执行文件。
eslint 文件的链接
我这里安装了 nvm,可以看到全局安装了 eslint 后,eslint 的文件链接被放到了 .nvm/versions/node/v16.20.1/bin 目录下
⬆️⬆️⬆️ 全局安装为执行命令做好了准备 ⬆️⬆️⬆️
接着就可以在 zsh 等终端执行 eslint 命令了
这里需要了解一下命令行和PATH环境变量
PATH 环境变量是操作系统用来定位可执行程序的一个关键变量。当在命令行终端输入一个命令时,例如 eslint,系统会检查 PATH 环境变量中列出的目录,以查找名为 eslint 的可执行文件。系统会按照 PATH 中目录的顺序去搜索,一旦找到匹配的命令,就停止搜索并执行该命令。
安装软件时,通常会将软件的可执行文件的路径添加到 PATH 中,卸载时则从 PATH 中移除,这样用户在安装或卸载软件后无需手动修改配置。
简而言之,PATH 环境变量是命令行使用的基础设施,它使得在终端中运行程序和脚本变得非常便捷。(以上关于命令行和PATH环境变量的部分由 coze 生成)
这里是我本地环境变量。看到了熟悉的 .nvm/versions/node/v16.20.1/bin
综上
可以大致回答问题“为什么全局安装了 eslint 后,可以直接在 zsh 中执行 eslint 命令”。
1、全局安装了 eslint 后,npm 会在 xx/bin 目录下创建一个指向可执行文件 xx/node_modules/eslint/bin/eslint.js 的链接
2、当在命令中输入 eslint xxx 时,终端会循着环境变量找到 eslint 命令对应的可执行文件
3、识别可执行文件中的 #!/usr/bin/env node,使用 node 执行此 eslint.js 脚本
此文章几乎都是通过 询问 GPT + 本地电脑操作对照 完成的。