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,感谢作者。