npm 依赖?不熟知的 optionalDependencies(可选依赖项)

前言

  • 背景
    • 项目对所有的开源组件依赖进行过统计,并将该版本号的依赖都统一提交至生产库(源地址:npm-prod)中;
    • 项目的开发源地址直连外网,有所有开源组件:npm-test;
    • 之前项目运行没问题
  • 问题
    最近一次操作(npm-prod下):
    => cd 到项目目录下
    => npm i 初始化依赖,正常
    => npm run dev 报错:
    the dependency was not found: 
    * canvg in ./node_modules/jspdf/dist/jspdf.es.min.js
    
    

😒然而:

  1. 查看 package-lock.json 文件:没有 canvg 这个组件
  2. 查看 package-lock.json 文件: D 是 jspdf 的依赖,并且有 canvg 3.0.6 版本,这就奇怪了:既然有这个依赖,为什么安装依赖不报错,运行时报错呢?
  3. 又在 npm-test 下重新安装 canvgnpm run dev 运行正常😂;区别在于在 npm-test 下比在 npm-prod 下安装的 canvg 中多了一个 @types/raf ,而这个组件是不在 npm-prod 库中的。

🥲问题到底在哪,之前运行可以,现在不行!?

  • 问题还在于 canvg ,它在项目中是 jspdf 的一个 optional dependencies,即:可选的依赖项,所以不是必须安装的,因此之前没有被排查到。

🤞主角:optionalDependencies

在 npm 中,熟知的依赖是 dependencies 和 devDependencies,除此之外,其实还有包括 optional dependencies 在内的几种依赖,重点说下 optional dependencies :

  1. 解释一:
    如果一个依赖关系可以被使用,但你希望npm在找不到它或安装失败的情况下继续进行,那么你可以把它放在optionalDependencies对象中。这是一个包名到版本或url的映射,就像依赖对象一样。不同的是,构建失败不会导致安装失败。

  2. 解释二:
    可选依赖,如果有一些依赖包即使安装失败,项目仍然能够运行或者希望npm继续运行,就可以使用optionalDependencies。另外optionalDependencies会覆盖dependencies中的同名依赖包,所以不要在两个地方都写。

❤️参考

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值