官网的Node.js下载了什么
同样, Node.js官网提供了pkg
格式的下载器, 通过工具, 可以看到这个下载器具体下载了什么东西:
其中, /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
为例, 下载后的目录结构如下:
其中package.json
用来记录当前项目下载了哪些包, 在迁移目录之后, 可以直接使用npm install
下载全部的包.
如果使用npm install -g
, 那么下载的包会到/usr/local/lib/node_modules
中, 全部用户都能使用.
在Javascript中使用require('<包名>')
时, 会先到项目中搜索是否有node_modules
, 如果没有就去全局的node_modules
中搜索.
如果要查看Js代码中require
的包在哪里, 可以用如下代码:
console.log(require.resolve('包名'))