您现在的位置是:亿华云 > 人工智能

Npm优化的工程化相关问题

亿华云2025-10-03 06:53:56【人工智能】2人已围观

简介package-lock.json缓存了每个包的具体版本和下载链接,这样就不需要再去远程仓库进行查询,节约了安装时间,提升了部署效率。package-lock.json文件作用就是锁定依赖安装结构,目

package-lock.json缓存了每个包的化的化相具体版本和下载链接,这样就不需要再去远程仓库进行查询,工程关问节约了安装时间,化的化相提升了部署效率。工程关问package-lock.json文件作用就是化的化相锁定依赖安装结构,目的工程关问就是保证在任意机器和环境上执行npm install都会得到完全相同的node_modules安装结果。

我们知道单一的化的化相package.json不能确定唯一的依赖树,这是工程关问因为:

不同版本的npm安装依赖策略和算法不同 npm install将根据package.json中的semver-range version更新依赖,某些依赖项自上次安装以来,化的化相可能已经发布了新版本。工程关问

并不是化的化相所有的子依赖都有dependencies属性,只有子依赖的工程关问依赖和当前已安装在根目录的node_modules中的依赖冲突后,才会有这个属性。云南idc服务商化的化相

至于要不要将lockfiles文件提交到代码仓库中,工程关问要看项目定位进行决定。化的化相

如果开发一个应用,建议将package-lock.json文件提交到代码版本仓库 如果开发目标是开发一个给外部使用的库,可以复用主项目已经加载过的包,减少依赖重复和体积 如果开发的库依赖精确的版本号的模块,那么提交lockfiles到仓库可能会造成同一个依赖不同版本都被下载的情况 如果作为库开发者,真的有使用某个特定版本依赖的需要,一个更好的方式就是定义peerDependencies

因此,推荐做法是将packjson-lock.json一起提交到代码库中,不需要ignore。但是在执行npm publish命令,发布一个库的时候,应该被忽略而不是直接发布出去。

早期npm锁定版本的方式使用npm-shrinkwrap.json,云服务器与package-lock.json不同点在于:npm包发布的时候默认将npm-shrinkwrap.json发布,因此类库或组件需要慎重使用。使用package-lock.json是npm v5.x版本新增特性,而npm v5.6以上才逐步稳定在5.0-5.6中间,对于package-lock.json的处理逻辑进行了几次更新。

在npm v5.x版本中,npm install时都会根据package-lock.json文件下载,不管package.json内容究竟是什么

npm v5.1.0版本到npm v5.4.2,npm install会无视package-lock.json文件,下载最新的npm包并进行更新package-lock.json文件

npm 5.4.2版本后

如果项目只有package.json文件,npm install后生成一个package-lock.json文件; 如果项目中存在package.json和package-lock.json文件,同时package.json文件的semver-range版本和package-lock.json中版本兼容,即使此时有新的适用版本,npm install还是会根据package-lock.json进行更新 如果项目存在package.json和package-lock.json文件,同时package.json文件的semver-range版本和package-lock.json中版本不兼容,npm install时package-lock.json会将更新到兼容package.json的版本 如果package-lock.json和npm-shrinkwrap.json同时存在项目根目录下,package-lock.json将会被忽略

npm设计的依赖类型声明有以下几种:

dependencies项目依赖----------------------------全部被下载,会部署在生成环境中 devDependencies开发依赖-------------------------不会被自动下载,只在开发环境中使用 peerDependencies同版本依赖----------------------- bundledDependencies捆绑依赖---------------------- optionalDependencies可选依赖----------------------

并不是只有在dependencies中的模块才会被一起打包,也不是亿华云计算devDependencies中的依赖一定不会被打包,这取决于项目开发过程代码是否进行了相关的依赖引用。其实dependencies、devDependencies更多是个规范作用。

注意:在bundledDependencies中指定的依赖包必须在dependencies、devDependencies中声明过,否则在npm pack阶段会进行报错

peerDependencies主要用于:

插件不能单独运行 插件正确运行的前提是核心依赖库必须先下载安装 不希望核心依赖库被重复安装 插件API的设计必须要符合核心依赖库的插件编写规范 在项目中同一插进体系下,核心依赖库版本最好相同

最后,可以得到开发建议:

优先使用npm v5.4.2以上的npm版本,以保证npm的最基本先进性和稳定性

项目的第一次搭建使用npm install安装依赖包,并提交package.json、package-lock.json文件,而不提交node_moduels目录

其它项目成员首次checkout/clone项目代码后,执行一次npm install安装依赖包

对于升级依赖包的需求:

依靠npm update命令升级到新的小版本 依靠npm install@升级大版本 也可以手动修改package.json中的版本号,并执行npm install来升级版本 本地验证升级后新版本无问题,提交新的package.json、package-lock.json文件

对于降级依赖包的需求:执行npm install@命令,验证没有问题后,提交新的package.json、package-lock.json文件

删除某些依赖:

执行npm uninstall,验证没有问题后,提交新的package.json、package-lock.json文件 手动操作package.json删除依赖,执行npm install验证没有问题后,提交新的package.json、package-lock.json文件

任何团队提交package.json、package-lock.json文件,其他成员需要拉取更新代码,执行npm isntall更新依赖

任何时候都不要修改package-lock.json

如果package-lock.json出现冲突或问题,建议将本地package-lock.json文件删除,拉取远程的package-lock.json文件和package.json,再执行npm install命令

参考:《前端基础建设和架构设计30讲》

很赞哦!(8885)