当前位置: 首页 > 科技观察

npm优化工程相关问题

时间:2023-03-12 07:59:33 科技观察

package-lock.json缓存了每个包的具体版本和下载链接,这样就不用去远程仓库查询,节省安装时间,提高部署效率。package-lock.json文件的作用是锁定依赖的安装结构。目的是确保在任何机器和环境上执行npminstall都会得到完全相同的node_modules安装结果。我们知道,单一的package.json并不能确定唯一的依赖树。这是因为:不同版本的npm安装了不同的依赖策略和算法。npminstall会根据package.json中的semver-range版本更新依赖,有些依赖会从上面更新。自上次安装以来可能已经发布了新版本。并不是所有的子依赖都有dependencies属性,只有当子依赖的依赖与根目录下当前安装的node_modules中的依赖发生冲突后,该属性才会有该属性。至于是否将lockfiles文件提交到代码仓库,需要根据项目定位来决定。如果开发应用,建议提交package-lock.json文件到代码版本仓库。如果开发目标是开发一个库供外部使用,可以复用主工程已经加载的包,减少依赖重复和体积。如果开发的库对于依赖精确版本号的模块,向仓库提交锁文件可能会导致下载同一个依赖的不同版本。如果你作为一个库开发者,确实需要使用特定版本的依赖,更好的方式是DefinepeerDependencies因此,推荐的做法是将packjson-lock.json一起提交到代码库,无需忽略。但是在执行npmpublish命令发布库时,应该忽略它而不是直接发布。早期的npmlock版本使用的是npm-shrinkwrap.json,它与package-lock.json的区别在于npm-shrinkwrap.json在发布npm包时默认会释放npm-shrinkwrap.json,因此需要谨慎使用类库或组件。package-lock.json的使用是npmv5.x版本的新特性,npmv5.6及以上在5.0-5.6中间逐渐趋于稳定,更新了package-lock.json的处理逻辑几次。在npmv5.x版本中,npminstall会根据package-lock.json文件下载,无论package.json内容是npmv5.1.0到npmv5.4.2,npminstall都会忽略package-lock。json文件,下载最新的npm包并更新package-lock.json文件。npm5.4.2版本之后,如果项目只有一个package.json文件,npminstall后会生成一个package-lock.json文件;如果项目-lock.json文件中存在package.json和package,并且package.json文件的semver-range版本与package-lock.json中的版本兼容。即使此时有新的适用版本,如果项目存在package.json和package-lock.json文件,npminstall仍然会根据package-lock.json更新,包的semver-range版本。json文件与package-lock.json中的版本不兼容。npm安装时,package-lock.json会更新为兼容package.json的版本如果项目根目录下同时存在package-lock.json和npm-shrinkwrap.json,package-lock.json将被忽略。npm设计的依赖类型声明如下:dependenciesprojectdependencies----------------------------全部下载下来,部署在生产环境devDependencies开发依赖------------------------不会自动下载,只使用开发环境同版本的peerDependencies------------------------bundledDependencies捆绑依赖------------------------optionalDependencies可选依赖---------------------不是只有dependencies中的modules会打包在一起,devDependencies中的依赖不一定不会打包,看项目开发过程代码是否有相关依赖引用。其实dependencies和devDependencies更多的是一个规范的作用。注意:bundledDependencies中指定的依赖包必须在dependencies和devDependencies中声明,否则在npmpack阶段会报错。核心依赖库重复安装。插件API的设计必须符合核心依赖库的插件编写规范。项目中同一个插入系统下,核心依赖库的版本最好是相同的。最后可以得到一个开发建议:首先使用npmv5.4.2或以上的npm版本,保证npm最基本的先进性和稳定性。第一次构建项目时,使用npminstall安装依赖包,提交package.json和package-lock.json文件,其他项目成员不提交node_moduels目录。签出/克隆项目代码后,执行npminstall安装依赖包。升级依赖包的要求:依赖npmupdate命令升级到新的次要版本依赖npminstall@upgrademajorversion也可以手动修改package.json中的版本号,执行npminstall升级版本在本地验证升级后新版本没有问题,提交新的package.json和package-lock.json文件。降级依赖包要求:执行npminstall@命令,确认没有问题后,提交新的package.json,package-lock.json文件删除部分依赖:执行npmuninstall,确认没有问题后问题,提交新的package.json,package-lock.json文件手动操作package.json删除依赖,执行npminstall验证没有问题后,提交新的package.json,package-lock.jsonfile任意团队提交package.json,package-lock.json文件,其他成员需要拉取更新的代码,执行npmisntall更新依赖,任何时候都不要修改包-lock.json如果有冲突或者package-lock.json有问题,建议删除本地package-lock.json文件,拉取远程package-lock.json文件和package.json,然后执行npminstall命令参考:《前端基础建设和架构设计30讲》