【问题标题】:How to add third party dependencies to typescript reference projects如何将第三方依赖项添加到打字稿参考项目
【发布时间】:2021-08-30 16:37:01
【问题描述】:

我有三个 typescript 项目,它们都引用了一个“核心”模块。

project-a
project-b
project-c
core

我想添加一些依赖第三方依赖的实用程序。这可以是 express 中间件、winston 记录器等。例如,默认的 winston 记录器。所以在core里面,我可能有

core/src/logger/index.ts

import winston from 'winston'
export default winston.createLogger()

project-aproject-b 引用了此文件,但 project-c 不引用此文件。如何以适应这种情况的方式设置我的 核心 项目?我正在考虑以下步骤:

  • 将此文件移动到一个全新的打字稿项目中
  • project-aproject-b 中的引用
  • winston 添加到依赖项并照常安装npm i -S winston
  • project-a 上运行 tsc -b

这会是理想的方法吗?我将向共享代码添加第三方引用,但无法强制在节点中安装类似于 peerDependencies 的依赖项。

【问题讨论】:

    标签: node.js typescript webpack


    【解决方案1】:

    有很多方法可以实现这一点,但最简单的方法之一可能是dependency injection

    当你初始化你的核心代码时,你可以选择传入一个类型来实现一些“Logger”接口(你可以定义),然后在 project-a 和 -b 中你可以传入一个类,等等,实现了winston记录器。在 project-c 中,您根本不传入任何记录器,因此核心不会使用它。

    在这种情况下,您的核心项目将不会直接引用 winston。只有项目 -a 和 -b 会拥有它,而 project-c 将没有不必要的依赖。

    但是,根据您的设置,tree shaking 可能会消除 project-c 中的额外依赖项,因此您可能会很好。

    【讨论】:

    • 感谢您的回复。温斯顿更像是一个例子,我已经更新了我的问题只是为了澄清。另一个例子是我想跨应用程序共享的一些快速中间件。因此,它不是 DI 的事情,而更多的是编写我可以分享的第三方库扩展的过程。
    • 如果你正在编译你的项目,那么winston很可能被打包在你的核心项目中,在这种情况下你的项目a、b和c不需要自己声明这个依赖。也许我还是不明白。
    • 啊……明白了。我想这取决于您使用的包管理器,但 NPM 通常可以很好地处理这个问题。如果包无法安装它们的依赖项,那么大多数包将无法正常运行 (which has happened before)
    • 是的......那么你有点卡住了。如果您只想直接导入模块,那么您需要将 npm 依赖项添加到您的项目-a、-b 和 -c 中。如果您不想用额外的依赖项污染您的包,那么您需要将您的核心项目视为 NPM 包,然后让 NPM 处理包的安装等。可能有办法解决这个问题,但我一个都不知道。
    • @plusheen - 实际上,工作空间可能正是您所需要的。但是我还没有使用它们,所以我不能提供更多的指导。 blog.bitsrc.io/npm-7-this-is-what-i-call-an-update-de17a34ab787
    猜你喜欢
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多