npm 介绍
什么是 npm
npm 全称 Node Package Manager,是使用 Node.js 写的包管理工具,可以让 JavaScript 开发者分享,复用代码更加方便:
在程序开发中我们常常需要依赖别人提供的框架,写 js 也不例外。这些可以重复的框架代码被称作包(package)或者模块(module),一个包可以是一个文件夹里放着几个文件,同时有一个叫做 package.json 的文件。
当我们想要使用开源的 package 时,使用npm install module-name进行下载,下载的代码出现在 node_modules 目录中,我们就可以在本地使用。
使用 npm
安装 npm
npm 集成在 Node.js 中,下载安装 Node.js 即可,可以查看 Node 和 npm 版本
node -v |
更新 npm
npm install npm@latest -g |
-g表示全局安装
package.json
package.json 创建和使用
管理本地安装的 npm 包需要 package.json 文件信息,在使用 npm 命令安装包之前首先在根目录初始化一个 package.json 文件
npm init -y |
每次使用 npm 安装新的包,package.json 都会更新对应信息,在使用别人的项目时根据package.json 信息,执行npm install下载所有需要的包
项目在上传 github 时候,依赖包文件夹 node_modules 是不上传的,只上传 package.json
package.json 信息
npm install babel-cli --save-dev # 安装 babel-cli |
package.json 文件如下
{ |
main: 入口文件,一般为 index.js
scripts: 支持的 npm 脚本,执行npm run build就相当于执行babel src -d lib
- 每当执行 npm run,就会新建一个 Shell,在这个 Shell 里执行指定的脚本命令
- npm run 新建的 Shell,会将当前项目目录的 node_modules/.bin 子目录加入 PATH 环境变量,执行结束后再将 PATH 恢复
- node_modules/.bin 目录下存储的都是脚本的软连接,都可以直接使用脚本名调用,不必加路径
dependencies: 在生产环境中用到的依赖包,发布后依然需要例如 VUE,React
devDependencies: 在开发、测试环境中用的依赖包,比如编译工具,压缩工具
package.json 与 package-lock.json 区别
package.json 是通过npm init创建时生成的,package.json 文件中会记录项目中所需要的模块。记录的只是每个模块的基本信息。模块名称和大版本信息
在使用npm install的时候会自动生成一个 package-lock.json 的文件,package-lock.json 文件则会记录每个模块的详细信息,如模块的具体版本号和各个模块所依赖的子模块的信息
npm install的过程大致就是从 package.json 中读取所有的依赖信息,然后再与node_modules 中已经安装的依赖进行对比,如果没有则通过 package-lock.json 获取相应版本号下载安装.如果已经存在则会通过 package-lock.json 检查更新
安装/卸载包
安装包
安装之前先运行npm init -y初始化 package.json
# 本地安装,只能在当前项目中使用 |
卸载包
npm uninstall module-name |
其他命令
更新包
npm update module-name |
npx
主要解决调用项目内部安装模块问题,以安装 babel-cli 后调用 babel 为例
一般调用要修改 package.json 的 scripts 字段
{ |
然后执行
npm run build |
如果使用 npx 调用
npx babel src -d lib |
npx 的原理很简单,就是运行的时候,会到 node_modules/.bin 路径和环境变量 $PATH 里面,检查命令是否存在
npm vs Yarn
Yarn 也是 JavaScript 包管理工具,和 npm 有很多相似之处,但下载包的速度更快,两者都是使用 package.json 记录所需模块的信息
使用 npm 安装包会生成 package-lock.json ,使用 Yarn 安装包会生成 yarn.lock