在Typescript项目中使用共享源的最佳方法?

时间:2017-10-09 18:23:20

标签: node.js angular typescript

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

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

我有3个文件夹:client /,server /和common /.

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

我使用Grunt为我的Node打字稿源编译它们和angular-cli(使用npm start)为我的角度应用程序。

3 个答案:

答案 0 :(得分:1)

处理此问题的最佳方法是将公共代码视为一个包(您甚至可以决定使用它,以便对其进行版本控制 - 即在私有NPM Feed中)。

即使您没有制作NPM包,也可以按照大部分步骤尽可能简化使用。

  1. 使用已启用的定义(--declaration
  2. 编译公共代码
  3. 使用UMD模块进行编译,因此相同的模块可以在Node和浏览器中使用
  4. .js.d.ts文件复制到您需要使用它们的位置
  5. 如果您使用“完整包”,请更改第三步,将文件复制到要打包的分发文件夹中。

    一般的想法是保留一组TypeScript文件的“真实来源”,并且无论您将代码复制到哪里,只需获取JavaScript和类型定义。

答案 1 :(得分:0)

在“./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是一个打字稿库的npm包,其中release标签包含已转换的javascript(github源不包含javascript)。可以通过键入npm install tfso/njs-tfso-repository#1.2.98

来安装

答案 2 :(得分:0)

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