Node.js-官网安装包的结构

  1. 官网的Node.js下载了什么
  2. npm下载包的逻辑是什么

官网的Node.js下载了什么

同样, Node.js官网提供了pkg格式的下载器, 通过工具, 可以看到这个下载器具体下载了什么东西:

image-20230620132154064

其中, /usr/local/bin中放了Javascript的解释器node, 而/usr/local/lib/node_modules中有npm包管理器.

后面的postinstall脚本如下:

#!/bin/sh

cd /usr/local/bin || exit 1
ln -sf ../lib/node_modules/npm/bin/npm-cli.js npm
ln -sf ../lib/node_modules/npm/bin/npx-cli.js npx

其中命令行的npm实际上是npm-cli.js脚本, 这个脚本如下:

#!/usr/bin/env node
require('../lib/cli.js')(process)

其实就是用node解释器去运行这个Javascript脚本.

npm下载包的逻辑是什么

使用npm install <包名>时, 会在当前目录的node_modules下下载对应包, 以axios为例, 下载后的目录结构如下:

image-20230620142349806

其中package.json用来记录当前项目下载了哪些包, 在迁移目录之后, 可以直接使用npm install下载全部的包.

如果使用npm install -g, 那么下载的包会到/usr/local/lib/node_modules中, 全部用户都能使用.

在Javascript中使用require('<包名>')时, 会先到项目中搜索是否有node_modules, 如果没有就去全局的node_modules中搜索.

如果要查看Js代码中require的包在哪里, 可以用如下代码:

console.log(require.resolve('包名'))