我有三个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-a和project-b引用,但不由project-c参考。如何设置核心项目以适应这种情况?我在考虑以下步骤:
- 将此文件移动到一个全新的typescript项目中
project-a
和project-b
中的引用- 将
winston
添加到依赖项并照常安装npm i -S winston
- 在
project-a
上运行tsc-b
这是理想的方法吗?我将向共享代码添加第三方引用,但无法强制在节点中安装类似于peerDependencies
的依赖项。
有很多方法可以实现这一点,但最简单的方法之一可能是依赖项注入。
当你初始化你的核心代码时,你可以有选择地传入一个类型,实现一些";CCD_ 8";接口(您可以定义它(,然后在项目a和-b中,您可以传入一个类等,该类实现winston记录器。在project-c中,您根本不传入任何记录器,因此核心不会使用它
在这种情况下,您的核心项目将不会直接引用winston。只有项目-a和-b会有它,而项目-c不会有不必要的依赖关系。
然而,根据您的设置,树抖动可能会消除project-c中的额外依赖项,因此您可能会保持原样。