与Typescript,CommonJS和Browserify的循环依赖问题

我正在将一个相当大的打字稿项目从内部模块移动到外部模块.我这样做是因为我想创建一个核心捆绑包,如果需要,可以加载其他捆绑包.我要记住的第二个要求是,我希望能够在nodeJS服务器上运行捆绑包(如果需要,可以进行一些修改).

我第一次尝试使用AMD& require.js构建核心包,但我遇到了循环依赖的问题.在阅读了这与require.js相同之后,commonJS更经常被建议用于大型项目我试过了.但是现在它与browserify一起设置,当我运行编译的bundle时,我在同一个地方出现了完全相同的问题.

我有类似10个基类的东西,它们相互依赖并形成多个循环依赖.我没有看到任何方法来删除所有这些.

一个简化的设置来解释为什么我认为我不能删除循环依赖项:

Triples are made of 3 Resources (subject,predicate,object)
Resource has TripleCollections to keep track of which triples its used in
Resource has multiple functions which rely on properties of Triple
Triple has some functions which handle TripleCollections
TripleCollection has multiple functions which uses functions of Triple
TripleCollection.getSubjects() returns a ResourceCollection
ResourceCollection.getTriples() returns a TripleCollection
Resource keeps track of the objects of its triples in ResourceCollections
ResourceCollection uses multiple functions of Resource

我已经在SO上阅读了多个相关问题(this one最有帮助),从我可以收集的内容中我只有几个选项:

1)将所有具有循环依赖关系的基类放在1个文件中.

这意味着它将成为一个文件的地狱.而且导入总是需要别名:

import core = require('core');
import BaseA = core.BaseA;

2)使用内部模块

当我使用内部打字稿模块和参考文件时,核心包工作正常(具有循环依赖性).但是,如果我想在运行时创建单独的bundle并加载它们,我将不得不使用带有require.js的所有模块的填充程序.

虽然我不太喜欢所有别名,但我想我现在会尝试选项1,因为如果它可以工作,我可以继续使用CommonJS和browserify,稍后我也可以更轻松地在节点上运行服务器上的所有内容.如果1没有成功,我将不得不求助于选项2.

Q1:我有没有提到过一些可能的解决方案?

Q2:具有1个核心捆绑包的打字稿项目的最佳设置是什么,它根据需要加载其他捆绑包(构建在核心上).这似乎无法绕过循环依赖.最好能在客户端和服务器上运行.

或者我只是要求不可能的?

相关文章

我最大的一个关于TypeScript的问题是,它将原型的所有方法(无...
我对React很新,我正在尝试理解子组件之间相互通信的简洁方法...
我有一个非常简单的表单,我将用户电子邮件存储在组件的状态,...
我发现接口非常有用,但由于内存问题我需要开始优化我的应用程...
我得到了一个json响应并将其存储在mongodb中,但是我不需要的...
我试图使用loadsh从以下数组中获取唯一类别,[{"listing...