【问题标题】:Best way to use shared sources in Typescript projects?在 Typescript 项目中使用共享源的最佳方式?
【发布时间】:2017-10-09 18:23:19
【问题描述】:

我正在做一个项目,使用 Angular4 作为前端,使用 Typescript 编写的 NodeJS 作为后端。

我想在双方之间使用一些 ts 源(例如 DTO 类),但我不知道如何以最佳方式处理它。他们确实使用了一些外部依赖项。

我有 3 个文件夹:client/、server/ 和 common/。

  • common 文件夹(包含公共 ts 源)是否应该有自己的 package.json?
  • 编译后的 .js 文件应该放在哪里?共同/目的地/?如果是这样,在运行应用程序(客户端+服务器)时导入是否能正常工作?

我将 Grunt 用于我的 Node 打字稿源来编译它们,并为我的 Angular 应用程序使用 angular-cli(使用 npm start)。

【问题讨论】:

    标签: node.js angular typescript


    【解决方案1】:

    处理此问题的最佳方法是将通用代码视为一个包(您甚至可以决定按字面意思对其进行版本化 - 即在私有 NPM 提要中)。

    即使你不制作 NPM 包,你也可以按照大部分步骤来让你的使用尽可能简单。

    1. 打开定义编译通用代码 (--declaration)
    2. 使用 UMD 模块编译,因此相同的模块将在 Node 和浏览器中运行
    3. .js.d.ts 文件复制到您需要使用它们的位置

    如果是“全包”,改第三步将文件复制到分发文件夹中进行打包。

    一般的想法是保留一个“真实来源”的 TypeScript 文件集,并且无论您在何处复制代码以获取 JavaScript 和类型定义。

    【讨论】:

    • 这仍然远不如 C# 项目有用,我可以在其中添加类库并享受。这是 Node imo 的一个严重缺点
    【解决方案2】:

    制作一个包,将你的库导出到“./index.ts”中

    package.json

    {
       //...
       "main": "./build/index.js",
       "typings": "./build/index"
    }
    

    tsconfig.json

    {
       "compilerOptions": {
          //...
          "declaration": true,
          "sourceMap": true,
          "outDir": "./build"
       },
       "exclude": [
          "node_modules",
          "build"
       ]
    }
    

    将您的代码推送到 github 并使用 npm 进行安装,npm install github:[username]/[repository]#[master/tag]

    例如https://github.com/tfso/njs-tfso-repository 是一个 typescript 库的 npm 包,其中 release 标记包含转译后的 javascript(github 源不包括 javascript)。这可以通过输入npm install tfso/njs-tfso-repository#1.2.98来安装

    【讨论】:

      【解决方案3】:

      如果您只有一个具有client / server/ shared 结构的简单项目,那么您可以更改您的tsconfig.json 以包含"compilerOptions" : { "rootDir": "../." }

      【讨论】:

        猜你喜欢
        • 2010-09-20
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多