6

我正在 TypeScript 中创建一个复杂的模块(解析 PE 文件结构,类似于 Mono.Cecil 所做的,但在 TS/JS 中并且不太复杂)。

问题是如何最好地将该功能放在文件/文件夹/模块维度中。

我从类似于 C# 的结构开始,每个类都在自己的文件中,命名空间(模块)对应于或多或少独立的功能集并位于子文件夹中。

现在在 TypeScript 中有几个问题。或者问题可能与我的愚蠢有关?

  1. 单独文件中的每个类都有利于开发,但对编译输出没有意义。没有人愿意携带 24 个文件而不是一个。
  2. 如果我将所有内容编译到一个文件中(tsc -out),每个单独文件的内容几乎都是独立发出的,即使它们都属于同一个模块。TypeScript 使用一些时髦的 hacky 语法构建该模块,而不是我手动编写的(这会将它们全部粘贴在一个模块定义的立即调用函数中)。
  3. 我希望我的东西可以在 Node.js 和浏览器中工作。对于 Node,我需要使用“导出模块”来添加所有内容,但对于浏览器,典型的用法只是生成whatever.js 并让页面包含它——这意味着我应该去掉“导出模块”。

处理它的最佳方法是什么?

4

3 回答 3

3

我目前正在使用 require.js 和 amd 模块来构建代码。每个类都在一个文件中,只需要一个 require.js 引导程序。我不使用节点,所以不能在这里发表评论,但它可能值得一看。 http://blorkfish.wordpress.com/2012/10/23/typescript-organizing-your-code-with-amd-modules-and-require-js/

于 2012-11-17T18:35:19.957 回答
0

Typescript 1.0+ 对此的回答是使用使用 CommonJs 语法的模块

传递tsc旗帜

--module commonjs

生成 CommonJS 样式模块并在 Typescript 文件中,使用 require 语法导入资源

import A = require('./A')  //no .ts in the name

要在浏览器中使用,请使用browserify,很可能与grunt-browserify相关联

于 2014-06-12T09:34:46.613 回答
0

如果您不想要 browserify(参见 BGR 的回答),您可以创建 2 个构建过程,一个用于 CommonJS(节点),另一个用于 RequireJS(浏览器)。2 个构建可以将其结果输出到其他文件夹(例如projectRoot/dist/server)。地狱般的 Grunt/Gulp 项目,但并非不可能。

为了更好的可用性,我还将创建一个没有类/接口的包装文件,它只包含其他文件并选择要导出的内容。我刚刚得到了一些提示: TypeScript export import interface

于 2015-06-09T08:38:03.320 回答