来源:Node.js

npm

npm,全称 Node Package Manager,是Nodejs 的包管理工具

它是一个基于命令行的工具,用于帮助开发者在自己的项目中安装、升级、移除和管理依赖项

类似于Java的Maven或Python的pip

npm命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
npm init  # 初始化新npm项目,创建package.json文件
# npm 5.4 直接使用npm install可能会出现依赖丢失问题,但该版本后npm install相当于默认使用--save
npm install # 安装一个包或一组包,并在当前目录存放一个node_modules(可以把install简写成i)
npm install <package-name> # 安装指定的包,使用“包名@版本号”的格式可以安装包对应的版本
npm install <package-name> --save # 安装指定的包,并将其添加到package.json的依赖列表中
npm install <package-name> --save-dev # 安装指定的包,并将其添加到package.json的开发依赖列表中
npm install -g <package-name> # 全局安装指定的包
npm update <package-name> # 更新指定的包
npm uninstall <package-name> # 卸载指定的包
npm run <script-name> # 执行package.json文件中定义的脚本命令
npm search <keyword> # 搜索npm库中包含指定关键字的包
npm info <package-name> # 查看指定包的详细信息
npm list # 列出当前项目中安装的所有包
npm outdated # 列出当前项目中需要更新的包
npm audit # 检查当前项目中的依赖项是否存在安全漏洞
npm publish # 发布自己开发的包到npm库中
npm login # 登录到npm账户
npm logout # 注销当前npm账户
npm link: # 将本地模块链接到全局的node_modules目录下
npm config list # 列出所有的npm配置信息,可以查看当前系统和用户级别的所有npm配置或版本信息;如果在项目目录下执行该命令,也可以查看当前项目的配置信息
npm get registry # 获取当前npm配置中的registry配置项的值;registry配置项用于指定npm包的下载地址,如果未指定,则默认使用npm官方的包注册表地址
npm set registry <registry-url> # 将registry配置项的值修改为指定的<registry-url>地址
npm config set registry <registry-url>  # 同上

npm install安装模块时一般是扁平化安装的,但是有时会出现嵌套的情况,这是因为版本不同

倘若A依赖C 1.0、B依赖C1.0、D依赖C 2.0,此时C 1.0就会被放到A、B的node_moduels,C 2.0 会被放入D模块的node_moduels

package.json

package.json 指南

执行npm init即可初始化一个package.json,其中含有一些配置项:

  • name:项目名称,必须是唯一的字符串,通常采用小写字母和连字符的组合

  • version:项目版本号,通常采用语义化版本号规范

    version的格式一般形如1.0.0,三个数字分别代表大版本号、次版本号、修订号

    • 大版本号:有重大变化才会升级
    • 次版本号:增加功能时进行升级
    • 修订号:修改bug时进行升级
  • author:项目开发者,它的值是开发者在npm官网的有效账户名,格式是”账户名 <邮箱>“

  • privare:是否私有,npm拒绝发布私有项目

  • description:项目描述

  • main:项目的主入口文件路径,通常是一个JavaScript文件

  • engines:此项目要运行的Nodejs或其他命令的版本

  • type:模块化类型

  • module:ESM模块化加载路径,有此项就查找此项,否则查找main

  • browserlist:需要支持的浏览器,Babel、Autoprefixer等工具会用到它,以将所需的polyfill和fallback添加到目标浏览器

  • keywords:项目的关键字列表,方便他人搜索和发现该项目

  • author:项目作者的信息,包括姓名、邮箱、网址等

  • license:项目的许可证类型,可以是自定义的许可证类型或常见的开源许可证(例如MIT、Apache等)

  • dependencies:项目所依赖的包的列表,这些包会在项目运行时自动安装,生产环境中也会用到

  • devDependencies:项目开发过程中所需要的包的列表,这些包不会随项目一起发布,而是只在开发时使用

  • peerDependencies:项目的同级依赖,即项目所需要的模块被其他模块所依赖,编写一些插件时会用到,使用本插件的项目必须已安装peerDependencies中的依赖

  • scripts:定义了一些脚本命令,比如启动项目、运行测试等

  • bin:内部命令对于的可执行文件的路径

  • repository:项目代码仓库的信息,包括类型、网址等

  • contributors:项目贡献者

  • bugs:项目的bug报告地址

  • homepage:项目的官方网站地址或者文档地址