这篇其实是对于npm全局安装和局部安装一文的笔记,加了一些我自己的理解,下面引用部分是我的注释。
必要时可以参考npm文档
全局安装
安装位置
npm所在位置
全局安装是将npm包安装在你的node安装目录下的node_modules文件夹中。
npm是Node.js的包管理工具,所以当我们从官网下载安装node的时候,npm也顺带装好了。
npm安装在node安装目录下的node_modules文件夹中
以下,“npm包”指利用npm命令安装的包
npm包所在位置
可以通过命令来查看npm全局安装的包所在的路径
// 查看全局安装路径
npm root -g
// 查看npm的基础设置
npm config ls
// 查看安装目录路径
npm config get prefix
我执行npm root -g 的结果是 E:\usr\local\node_modules,在该目录下可以看到自己使用npm安装的yarn:
全局命令
npm包在全局安装之后,这个包的命令就会被注册到全局,你就可以直接在命令行中执行这个命令了。
其实,当你全局安装一个npm包之后,在这个包的package.json文件中,在bin属性下配置的执行命令,会放在npm包所在node_modules目录的父目录中。
当你在命令行执行这个命令,系统就会执行该父目录下对应的命令文件。
比如,打开上面的yarn包中的package.json:
"bin": { "yarn": "./bin/yarn.js", "yarnpkg": "./bin/yarn.js" },
可以看到定义了两个命令yarn和yarnpkg。以yarn命令为例,对应的执行文件为./bin/yarn.js:
而该命令会在yarn包所在路径的父目录,即E:\usr\local\中生成对应的命令脚本:
有时候,我们用npm全局安装的包,执行相应的命令时却提示 **不是内部或外部命令,也不是可运行的程序 。这是因为对应的命令脚本所在目录没有配置到path中。
以上面的目录为例,我们可以直接把E:\usr\local\配置到path中,这样,npm全局安装的包都可以在命令行中执行。
本地安装
安装位置
在特定项目中执行npm install xxx,那么这个包会被安装在这个项目的node_moduels目录下。但是如果你在这个项目中直接执行包中的命令,就会发现控制台报错,告诉你这个命令找不到。这时候有两个解决方法:
- 使用npx执行:npx出现主要解决的问题就是调用项目内部安装的模块,所以你可以在项目中执行npx 包命令。
- 在package.json文件中配置:
"scripts": {
"script命令": "包命令",
}
原理: 在本地安装一个包之后,这个包的命令会被添加到项目的node_modules/.bin文件中。执行npm run 命令,package.json中的scripts会按照一定顺序寻找对应命令的位置,本地的node_modules/.bin也在寻找的清单中。所以本地安装的包的命令可以执行。
package.json
管理本地安装的包的最好方法是创建一个package.json文件。
如果在项目文件夹下有package.json文件,你在该项目中运行命令npm install,npm就会检查文件中列出的依赖包,并下载所有满足语义化规则的最新版本的依赖包。
这时,会在package.json同目录的node_modules中下载所有的包;
如果node_modules里面有不在package.json中的包,会被删除。
引用
本地安装包之后,包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require的方式引入就好,无需指定第三方包路径。
e.g.
var express = require('express');