NPM包管理工具入门
前言
NPM
对于Nodejs
, 就像Maven
对于Java
.NPM
是一个包管理工具, 用于管理依赖.
npmrc 详解
作为一个包管理工具, 肯定有相关的配置.
比如, 从哪个仓库下载依赖, 保存到本地的哪个目录下.
安装好NPM
后, 会有三个文件
- 每个项目的配置文件(
/path/to/my/project/.npmrc
) - 每个用户的配置文件(
〜/.npmrc
) - 全局配置文件(
$PREFIX/etc/npmrc
) NPM
内置配置文件(/path/to/npm/npmrc
)
具体可以看看npmrc
官方文档
1 | 设置远程仓库 |
像我们一开始都会配置国内仓库, 这些命令都是去修改用户的配置文件, 也就是~/.npmrc
package.json 和 package-lock.json
和pom.xml
类似, package.json
就是描述这个项目的, 发布的时候会用到.
这里拿hexo
的举个例子.
1 | { |
name
和version
是必填项, 用来标记项目名称和版本号. 这个name
可以作为require
的参数传递.scripts
用来注册npm
命令, 比如npm clean
就会调用hexo clean
命令.hexo
是自定义的配置, 不用管.dependencies
表示本项目的所有依赖名称以及版本哈.
具体可以看看package.json
官方文档
package-lock.json
和package.json
结构差不多, 那为什么要有两个不同的文件呢?
package.json 和 package-lock.json
比如说hexo
依赖的hexo-renderer-ejs
在package.json
的版本号是1.0.0
.
在执行npm install
的时候, npm
会根据package.json
的定义, 从本地磁盘或远程仓库里获取依赖.
假设hexo-renderer-ejs
紧急发布了一个修复bug
的版本1.0.2
.
那在执行npm install
的时候就会去根据主版本号1
去获取最新的hexo-renderer-ejs
版本.
正常按语义化版本的规范来说, 只要主版本号不变, 那都是兼容的.
但万一不按规范来, 比如1.0.2
和1.0.0
是不兼容的. 而npm install
每次都会根据主版本号去拉取最新的依赖, 那风险就很大了.
为了解决这个问题, package-lock.json
就出现了. package-lock.json
和package.json
结构差不多.
执行npm install
的时候, npm
会根据package.json
拉取最新的依赖版本, 然后生成package-lock.json
, 锁定版本号.
然后下次npm install
的时候, 就会从package-lock.json
中获取准确的版本号, 就不会出现升级风险.