• 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}}AppDataRoaming pm-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
  • 相关阅读:
    服务级后门自己做——创建服务
    使用Win32创建串口通讯程序
    LoadImage with resource 出现未定义
    direct path write等待事件
    enq: TX row lock/index contention、allocate ITL等待事件
    enq: TT contention等待事件
    enq: TM contention等待事件
    enq: RO fast object reuse等待事件
    direct path write temp等待事件
    enq: US contention等待事件
  • 原文地址:https://www.cnblogs.com/wyp1988/p/13267882.html
Copyright © 2020-2023  润新知