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

Node.js 在Typescript项目中使用共享源的最佳方法?,node.js,angular,typescript,Node.js,Angular,Typescript,我正在做一个项目,使用Angular4作为前端,使用Typescript编写的NodeJS作为后端 我想在双方之间使用一些ts源(例如DTO),但我不知道如何以最佳方式处理它。它们确实使用了一些外部依赖项 我有3个文件夹:client/、server/和common/ 公共文件夹(包含公共ts源)是否应该有自己的package.json 编译后的.js文件应该放在哪里?共有/dest/?如果是这样,那么在运行应用程序(客户端+服务器)时导入是否工作正常 我正在为我的节点类型脚本源使用Grun

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

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

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

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

我正在为我的节点类型脚本源使用Grunt来编译它们,并为我的angular应用程序使用angular cli(使用npm start)。

处理这一问题的最佳方法是将公共代码视为一个包(您甚至可以决定将其按字面意思进行编译,以便您可以对其进行版本设置,即在专用npm提要中)

即使您没有制作NPM软件包,您也可以按照大多数步骤使您的使用尽可能简单

  • 在打开定义的情况下编译公共代码(
    --declaration
  • 使用
    UMD
    模块进行编译,这样相同的模块将在节点和浏览器中工作
  • .js
    .d.ts
    文件复制到需要使用它们的地方
  • 如果选择“完整打包”,请更改第三步,将文件复制到要打包的分发文件夹中


    一般的想法是保留一组单独的“真实源”类型脚本文件,无论您在哪里复制代码,都只获取JavaScript和类型定义。

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

    即使您没有制作NPM软件包,您也可以按照大多数步骤使您的使用尽可能简单

  • 在打开定义的情况下编译公共代码(
    --declaration
  • 使用
    UMD
    模块进行编译,这样相同的模块将在节点和浏览器中工作
  • .js
    .d.ts
    文件复制到需要使用它们的地方
  • 如果选择“完整打包”,请更改第三步,将文件复制到要打包的分发文件夹中


    一般的想法是保留一组单独的“真实来源”类型脚本文件,无论您在哪里复制代码,都只获取JavaScript和类型定义。

    制作一个包,您可以在其中以“/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安装github:[username]/[repository]#[master/tag]


    例如,typescript库的npm包,其中release标记包含传输的javascript(github源代码不包括javascript)。通过键入
    npm install tfso/njs tfso repository#1.2.98

    在“/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安装github:[username]/[repository]#[master/tag]


    例如,typescript库的npm包,其中release标记包含传输的javascript(github源代码不包括javascript)。这可以通过键入
    npm install tfso/njs tfso repository#1.2.98

    来安装,如果您有一个带有
    client/server/shared
    结构的简单项目,那么您可以更改
    tsconfig.json
    以包含
    “编译器选项”:{“rootDir”:“/.”

    如果你有一个简单的项目,它有一个
    客户机/服务器/共享的
    结构,那么你可以修改你的
    tsconfig.json
    以包含
    的“编译器选项”:{“rootDir”:./.“}

    这还远没有C项目有用,我可以在C项目中添加类库并享受它。这是Node-imo的一个严重缺点,它远没有C#project有用,在C#project中我可以添加类库并享受它。这是Node imo的一个严重缺点