在 npm 包中使用对等依赖项

Posted

技术标签:

【中文标题】在 npm 包中使用对等依赖项【英文标题】:Using a peer dependency in npm package 【发布时间】:2020-07-05 10:46:51 【问题描述】:

我在一个充满实用功能的 npm 包中将 momentjs 列为对等依赖项。这些功能之一使用矩。

"peerDependencies": 
    "moment": "2.x.x"
,

以下是使用时刻的简化视图:

import moment from 'moment'

export default function formatDate(someDate) 
  return moment(someDate).format('MM/DD/YYYY')

我的 package.json 看起来像这样:

"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
    "dist"
],
"scripts": 
    "build": "tsc",
    "publish-free": "npm publish --access public"
,

当我运行“npm run build”时,我在终端中收到一条错误消息,提示“找不到模块'moment'”。

我目前正在通过使用 npm 链接将其连接到我的主项目来测试包,我已经安装了 moment 但我无法通过构建阶段。

【问题讨论】:

您应该将其安装为开发依赖项,并将其标记为其他人的对等依赖项。 尝试运行tsc --preserveSymlinks作为构建脚本。 添加为开发依赖项似乎是共识并且对我有用!谢谢。 【参考方案1】:

只需将其作为依赖项安装即可。为什么要将其安装为 peerDependency?

【讨论】:

因为 moment 安装在我的父项目中,我试图避免可能依赖于同一包的两个不同版本。 相同的主要版本? 确实,对于momentjs,我不太可能最终得到不同的主要版本。不过,总的来说,对等依赖项的全部意义难道不是您可以从父项目已安装的依赖项中捎带回来吗? 这就是我的全部观点。一般来说,您不应该使用对等依赖项,好吗?

以上是关于在 npm 包中使用对等依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何识别哪些 npm 包只是对等依赖项?

如何将 npm 依赖项添加为对等依赖项

安装拉力编码依赖项时未安装 NPM 警告所需的对等依赖项

为啥 NPM 7.17 不安装我的对等依赖项

覆盖对等依赖项时出错 - npm install reactstrap

为啥“npm install”告诉我“没有安装你必须自己安装对等依赖项:”?