Gro*_*fit 7 amd node.js typescript
我正在寻找在节点内使用typescript,我目前习惯通过///<reference.../>语法纯粹使用内部模块来使用typescript .但是对于较大的项目,这可能会变得难以处理,因为您可以使用引用其他模块的模块,这些模块都具有相互链接的引用.
所以对于这个节点项目,我正在考虑尝试将所有逻辑组件分组为内部模块/类,就像之前一样,因此它们将在内部相互引用,但是通过一个外部模块公开它们,这将暴露底层类等.
这种方式的语法与现有需要机制的节点非常相似,例如:
import database = require("my-external-db-module.ts");
var connection = new database.Connection(someUrl);
Run Code Online (Sandbox Code Playgroud)
而不是
///<reference path="my-internal-db-modules.ts" />
var connection = new Database.Connection(someUrl);
Run Code Online (Sandbox Code Playgroud)
我想像语法会是这样的:
///<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
}
Run Code Online (Sandbox Code Playgroud)
那么有什么样的最佳实践围绕这类事情或任何其他类似的东西,或者每个人都只是坚持使用内部模块来处理复杂的东西?
我不确定这是不好的做法,但这是我如何解决我的问题.
首先快速总结一下问题:
我有多个文件在逻辑上分组在命名空间下,例如Framework那里的所有文件都将是Framework.*,例如Framework.Database或Framework.UnitOfWork.然后这些都是通过编译tsc --out framework.js ...所以我将所有这些输出到一个framework.js文件中.
现在上面听起来很好,但是它不允许你在使用--out时导出模块,因为它跨越多个文件,所以为了节点工作,我需要以某种方式导出模块,所以我基本上附加了一个额外的打字稿文件,手动做这对我来说在汇编中:
// exporter.ts
module.exports = Framework;
Run Code Online (Sandbox Code Playgroud)
因此,提供这是添加到tsc编译中的最后一个文件,您将最终得到如下内容:
// Framework.js
var Framework;
(function (Framework) {
// lots of good stuff
})(Framework || (Framework = {}));
module.exports = Framework;
Run Code Online (Sandbox Code Playgroud)
因此,这将导出内部模块正常,并且现在将包含导出声明,因为现在包含了exporter.ts文件.
所以我不确定这是不是很糟糕的做法,但是这让我可以充分利用两个世界,一个可重用的模块,它是用命名空间布局的,并且分布在一个合理的文件结构中,以及一个编译的单个模块,它可以是包括引用或nodejs require.
因此用法如下:
var Framework = require("./framework");
var database = new Framework.Database.DbConnection();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2587 次 |
| 最近记录: |