NPM(Node Package Manager)是前端最基础的工具之一,管理着项目的依赖。但用了这么久,始终没有单独地讨论过:npm是一个怎样的系统。

Node.JS调用模块

如果没有npm,我们可能需要const <module_name> = require(‘./module_name.js’);

但调用次数多了,这样的代码也多了,我们需要一个包管理系统替我们管理模块引用,也就是npm。

除了管理本地包,npm也提供了快速安装需要的依赖的能力,省心。

package.json

package.json位于项目根目录,定义了项目的配置信息与依赖的模块。一个完整的package.json文件是一个可能包括name,version,author,description,keywords,repository,license,browser,engines,bugs,contributors,scripts,dependencies,devDependencies等字段的json对象。

scripts支持自定义 npm run xxx 命令
dependencies/
devDependencies
项目依赖/项目开发时的依赖
main项目入口文件
config自定义scripts中命令的环境变量

npm init

npm init的作用是创建package.json文件,这个过程中终端会询问你有关这个包的信息,如果想自定义init过程,可以在用户目录下新建.npm-init.js。

const desc = prompt('description?','A new package...')//prompt用于获取用户输入

module.exports = {
  name: prompt('name?','A new project'),
  version: prompt('version?','0.1.0'),
  description: desc,
  main: 'index.js'
}

用户执行npm init后会生成包含name,version,description,main的pair(name:value)的package.json。

npm install

使用频率最高的命令,npm install的作用是安装package.json中定义的依赖。但也可以直接用npm install <package>安装某个依赖,依赖可以是文件夹,压缩文件,url,git仓库,可以用<name>@<version>或<name>@<tag>(通常是latest)指定版本。

package-lock.json

npm5才有package-lock.json,其作用是锁定依赖结构。它详细记载了每个包的版本号,安装源,内容hash,而它的json结构与node_modules的目录结构一致。这个文件保证了在任何地方执行npm install能够得到相同结果。

版本管理

semver(语义化)规范

semver指版本号格式为MAJOR.MINOR.PATCH,MAJOR指不兼容更新,MINOR指兼容的更新,PATCH指修复BUG。

npm update

升级MINOR版本

npm install <package>@<version>

升级或降级大版本

npm uninstall <package>

卸载依赖包

npm scripts

在package.json里也介绍了,定义scripts字段可以执行脚本。脚本执行时./node_modules/.bin/被添加到环境变量PATH,可以直接调用项目下安装的命令行包。需要参数时需要先在命令后加上” — “再传入参数,如”npm run clean — –mode=”all” “。此外,脚本还可以访问process.env对象获得运行时信息。

npx

命令行包指的是可以在终端中直接调用的包,比如vue-cli和webpack。他们保存在node_modules/.bin目录中,如果不是全局安装,需要在调用的时候加上目录。

而npx的作用是,省去加上目录的烦恼,我们只需要npx <command>就可以执行脚本。

除此之外,npx支持直接执行远程二进制包(npm源,GitHub gist等),更可以跳过nvm选择node版本执行命令,如npx node@10 -e “console.log(process.version)”。

npm配置

npm config

npm config ls -l

查看npm所有配置

npm config set <key> <value>

<key>可选proxy, https-proxy(代理),registry(npm源),package-lock(是否默认生成package-lock),save(是否在npm install后保存包为dependencies,npm5开始默认为true)

npm config delete <key>

删除配置

npmrc

.npmrc文件可以存在于项目根目录,用户根目录,全局配置目录($PREFIX/etc/npmrc,可以用npm config get globalconfig输出),npm内配置文件(/path/to/npm/npmrc),优先级从前往后。

内容总结自互联网,主要参考https://juejin.im/post/5ab3f77df265da2392364341,感谢作者。