avatar

目录
npm包管理工具

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 版本

powershell
node -v
npm -v

更新 npm

powershell
npm install npm@latest -g

-g表示全局安装

package.json

package.json 创建和使用

管理本地安装的 npm 包需要 package.json 文件信息,在使用 npm 命令安装包之前首先在根目录初始化一个 package.json 文件

powershell
npm init -y

每次使用 npm 安装新的包,package.json 都会更新对应信息,在使用别人的项目时根据package.json 信息,执行npm install下载所有需要的包

项目在上传 github 时候,依赖包文件夹 node_modules 是不上传的,只上传 package.json

package.json 信息

powershell
npm install babel-cli --save-dev # 安装 babel-cli
npm install babel-preset-es2015 --save-dev # 安装 ES2015转码规则

package.json 文件如下

json
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "babel src -d lib"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {},
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-preset-es2015": "^6.24.1"
}
}

main: 入口文件,一般为 index.js

scripts: 支持的 npm 脚本,执行npm run build就相当于执行babel src -d lib

  1. 每当执行 npm run,就会新建一个 Shell,在这个 Shell 里执行指定的脚本命令
  2. npm run 新建的 Shell,会将当前项目目录的 node_modules/.bin 子目录加入 PATH 环境变量,执行结束后再将 PATH 恢复
  3. 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

powershell
# 本地安装,只能在当前项目中使用
npm install module-name

# 自动把模块名和版本号添加到 package.josn 的dependencies 中
npm install module-name --save

# 自动把模块名和版本号添加到 package.json 的devDependencies 中
npm install module-name --save-dev

# 全局安装,可以在命令行中直接使用
npm install module-name -g

# 安装 package.json 中 dependencies 和 devDependencies 中所有的模块
npm install

# 只安装 dependencies 中的模块
npm install --production

卸载包

powershell
npm uninstall module-name
npm uninstall module-name -g

其他命令

更新包

powershell
npm update module-name

npx

主要解决调用项目内部安装模块问题,以安装 babel-cli 后调用 babel 为例

一般调用要修改 package.json 的 scripts 字段

json
{
"scripts": {
"build": "babel src -d lib"
}
}

然后执行

powershell
npm run build

如果使用 npx 调用

powershell
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

Yarn使用方法

Yarn常用命令

参考链接

npm 模块安装机制简介

npm scripts 使用指南

npx 使用教程

npm 与 package.json 快速入门

文章作者: GRIT
文章链接: https://grit0821.github.io/Blog/2020/01/09/npm%E5%8C%85%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Grit's World