Node.js的包管理(module)

  • 使用npm install等命令来安装、管理包
  • 项目目录的package.json
    • 需要放到项目的SCM代码仓库中
    • 类似maven的pom文件,是开发者定义依赖包的地方
    • 和npm install等命令相互影响。如果直接使用npm install xxx等命令增删改包的使用,会同步到package.json中;如果先改了package.json,然后使用无参数的npm install命令会根据package.json的配置去更新包的引用。
    • 版本号匹配符
      • 波浪符号(~)与最近的次要版本(中间号码)匹配。〜1.2.3将匹配所有1.2.x版本,但将错过1.3.0。
      • 插入符号()更放松。它会更新你最近的主要版本(第一个数字)。 1.2.3将匹配任何1.x.x版本,包括1.3.0,但会在2.0.0上停止。
  • 项目目录的package.lock.json
    • 不需要放到项目的SCM代码仓库中
    • 当前项目根据package.json的配置去npm install后的状况;会显示真实安装时各包之间的依赖关系;还包含一些和缓存目录中的包一致的sha1值用于判断是否需要重新下载,还是可以直接从缓存中拿。
    • package-lock.json是当 node_modules 或 package.json发生变化时自动生成的文件。这个文件主要功能是确定当前安装的包的依赖,以便后续重新安装的时候生成相同的依赖,而忽略项目开发过程中有些依赖已经发生的更新
    • sha1值
      NPM install之后会计算每个包的sha1值,然后将包与他的sha1值关联保存在package.lock.json里面
      • 下次NPM install的时候会根据package.lock.json里面保存的sha1值去缓存目录里面寻找包文件,如果存在,就不用再次从网上下载安装包了
    • 和package.json的关系
      • npm 5.0.x:不管package.json怎么变,npm install 时都会根据package-lock.json文件下载;
      • npm 5.1.x:npm install 会无视package-lock.json文件,去下载最新的包;
      • npm 5.4.2后:如果改了package.json,且package.json和package-lock.json文件不同,那么npm install 时npm会根据package中的版本号以及语义含义去下载最新的包,并更新至lock。如果两者是同一状态,那么npm install 都会根据lock下载,不会理会package实际包的版本是否有更新。
  • 项目目录的node_modules目录
    • 不需要放到项目的SCM代码仓库中
    • npm install后,当前项目真实依赖的包
    • 会有源码
  • npm cache缓存
    • NPM会把所有下载的包保存,可以使用npm config get cache命令来查看位置,默认一般放在用户文件夹下面,比如C:\Users{{username}}\AppData\Roaming\npm-cache目录下面
    • 可以使用npm cache clean --force清除该目录中的内容
      • npm@5 之后,cache clean 只会清除该缓存目录下的 _cacahce 子目录,而忽视不在该子目录的缓存。
    • 如果该目录中已经有想要的版本的包了,那么npm install就不会去网上再下载了,而是直接放到项目的node_modules目录中,npm install的输出中也会提到哪些是从缓存中取的。
  • 注意
    • NPM不同版本算出来的sha1貌似不完全一样,所以直接用别人的package.lock.json会报sha1不匹配的error
    • 处理包找不到(有时很奇怪,可能是node升级了大版本引起的,需要删掉node_modules目录)、sha1不匹配等包的安装问题
      • 重新整个项目npm install
      • 还不行就删掉node_modules目录再重新npm install(有时候node_modules目录东西太多,可以先重命名一下就可以重新npm install了)
      • 再不行就删掉package.lock.json,清除缓存npm cache clear --force,删掉node_modules,然后再npm install

posted on 2020-07-08 16:51  碎羽love星谊  阅读(345)  评论(0编辑  收藏  举报

导航