gpt4 book ai didi

node.js - 包装许多内部模块以在 typescript 中导出

转载 作者:搜寻专家 更新时间:2023-10-30 20:37:34 25 4
gpt4 key购买 nike

我正在考虑在 Node 中使用 typescript ,目前习惯通过 ///<reference.../> 使用 typescript 纯粹使用内部模块的语法。然而,对于较大的项目,这可能会变得笨拙,因为您可以让模块引用其他模块,而这些模块都具有相互链接的引用。

所以对于这个 Node 项目,我正在考虑尝试像以前一样将所有逻辑组件分组为内部模块/类,因此它们都将在内部相互引用,但通过一个外部模块公开它们这将暴露底层类等。

这样,语法将与现有需要机制的 Node 非常相似,例如:

import database = require("my-external-db-module.ts");
var connection = new database.Connection(someUrl);

而不是

///<reference path="my-internal-db-modules.ts" />
var connection = new Database.Connection(someUrl);

我想语法应该是这样的:

///<reference path="all-my-internal-module-files-etc.ts" />
///<reference path="..." />
export module SomeExposingModule
{
// Not quite sure what to put in here to expose the internal modules
}

那么,是否有关于此类事情的任何最佳实践或任何其他做过类似事情的人,还是每个人都坚持使用内部模块来处理复杂的事情?

最佳答案

我不确定这是否是不好的做法,但这是我解决问题的方法。

首先再次快速总结一下问题:

我有多个文件都在逻辑上分组在一个命名空间下,例如 Framework 那么下面的所有文件都将是 Framework.*,例如 Framework.Database Framework.UnitOfWork。然后这些都是通过 tsc --out framework.js ... 编译的,所以我将所有这些输出到 framework.js 文件中。

现在上面听起来不错,但是它不允许你在使用 --out 时导出模块,因为它跨越多个文件,所以为了 Node 工作,我需要以某种方式导出模块,所以我基本上附加了一个额外的 typescript 文件在编译中手动为我做这个:

// exporter.ts
module.exports = Framework;

因此,如果这是添加到 tsc 编译中的最后一个文件,您将得到如下内容:

// Framework.js
var Framework;
(function (Framework) {
// lots of good stuff
})(Framework || (Framework = {}));
module.exports = Framework;

因此,这将很好地导出内部模块,并且现在将包含导出声明,因为现在包含了 exporter.ts 文件。

所以我不确定这是否是不好的做法,但这让我拥有了两全其美的优势,一个使用命名空间布局并分布在一个合理的文件结构中的可重用模块,以及一个编译的单个模块可以通过引用或 nodejs 要求包含它。

所以用法看起来像:

var Framework = require("./framework");
var database = new Framework.Database.DbConnection();

关于node.js - 包装许多内部模块以在 typescript 中导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17719258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com