【问题标题】:Sharing TypeScript classes between client and server在客户端和服务器之间共享 TypeScript 类
【发布时间】:2016-05-05 23:14:37
【问题描述】:

我有一个用 TypeScript 编写的 Node.js 项目。在我的项目中,我有一个名为“public”的文件夹,其中包含客户端代码和 HTML,还有一个名为 classes.ts 的文件,应该共享到服务器端。

问题是我需要在类声明之前添加“导出”以使它们在服务器中可访问,但随后在浏览器中出现此错误:

未捕获的引用错误:未定义导出

我发现了这些问题: https://github.com/Microsoft/TypeScript/issues/5094, Setup a Typescript project with classes shared between client and server apps?, Share module between client and server with TypeScript, 这建议在服务器中使用 commonjs 但在客户端中使用 amd。这个解决方案的问题是他们有 3 个不同的项目(服务器、客户端和共享),而我只有一个使用 commonjs 的项目。 另一个建议是:

另一个选项,更复杂,需要一个帖子 构建按摩代码的步骤;如果你不能使用模块加载器 您的客户端代码是隔离服务器中的所有模块依赖项 代码,然后在共享中,它们只是类。构建共享 没有 --module 的文件,也没有导出或导入,但都在一个 单个命名空间,比如命名空间 MyApp { ... };在您的客户代码中, 您直接包含它们,并使用 --out 发出。在您的服务器代码中, 您首先将共享代码发送到单个文件 shared.js 和 单个 .d.ts shared.d.ts,用一些代码扩充这些以导出它们 作为一个模块,例如在 shared.js 的末尾附加 export = MyApp 和 shared.d.ts,然后从您的服务器代码中导入它们。

但我不想一直处理更新 .d.ts 文件,我也不确定它是否适用于一个项目。

有什么建议可以让 TypeScript 类在浏览器和服务器中都可以访问吗?

任何帮助将不胜感激!

【问题讨论】:

    标签: node.js typescript amd commonjs


    【解决方案1】:

    这是绝对可能的。

    我有一个项目,其中包含在浏览器中运行的 SPA 客户端应用程序和在 node.js 中运行的服务器,它们都共享通用的打字稿类。对于所有这些,我只有一个 tsconfig.json 文件(我仍然不确定这是不是最好的方法,但现在它工作得很好)

    以下是我的部分设置:

    • 使用模块(以前称为外部模块)。您自己的模块无需命名空间和 d.ts 文件。
    • 模块 = tsconfig 中的“commonjs”。
    • 在客户端使用 System.js 作为模块加载器(这将解决您的“未捕获的 ReferenceError:未定义导出”)。您可以使用angular2 5 min quickstart 作为参考如何设置system.js。

    它就像一个魅力。

    【讨论】:

    • 我有一个与此主题和您的解决方案相关的问题。我针对该问题发布了另一个问题,并且我也开始为它提供赏金。如果你能帮助我,我将不胜感激。这是新问题:stackoverflow.com/questions/37263627/…
    猜你喜欢
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 2017-06-14
    • 2021-10-23
    • 1970-01-01
    相关资源
    最近更新 更多