Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 带有共享包的Typescript项目设置_Node.js_Typescript_Npm_Lerna - Fatal编程技术网

Node.js 带有共享包的Typescript项目设置

Node.js 带有共享包的Typescript项目设置,node.js,typescript,npm,lerna,Node.js,Typescript,Npm,Lerna,在开始之前,我有几个前提: 我想要一个共享包,它将包含在其他三个包中 打字稿 只有一个节点模块 多平台使用(Windows/Linux) 使用共享包中的依赖项 (现场重新加载将很好) 不要失去以后发布共享包的能力(其他三个包是web服务器,但现在正在进行大量开发) 来自全局包的通用脚本build:webbuild:apibuild:admin 我的文件夹结构是: / /node_modules/*** /packages/shared/package.json // Shared depend

在开始之前,我有几个前提:

  • 我想要一个共享包,它将包含在其他三个包中
  • 打字稿
  • 只有一个节点模块
  • 多平台使用(Windows/Linux)
  • 使用共享包中的依赖项
  • (现场重新加载将很好)
  • 不要失去以后发布共享包的能力(其他三个包是web服务器,但现在正在进行大量开发)
  • 来自全局包的通用脚本
    build:web
    build:api
    build:admin
  • 我的文件夹结构是:

    /
    /node_modules/***
    
    /packages/shared/package.json // Shared dependencies like typeorm, lodash etc..
    /packages/shared/src/index.ts
    /packages/shared/src/models/User.ts
    
    /packages/web/package.json
    /packages/web/tsconfig.json
    /packages/web/src/index.ts // first express server (using shared code)
    
    /packages/api/package.json
    /packages/api/tsconfig.json
    /packages/api/src/index.ts
    ...
    
    /package.json
    /tsconfig.common.json
    
    互联网上有很多解决方案——Lerna、typescript项目参考、npm/Thread链接。。。但我无法找到一个合适的解决方案

    例如,这很酷,但我无法设置为运行以下内容:

    // package.json
    
    {
      "scripts": {
         "debug:web": "concurrently \"(cd packages/shared && tsc -w)\" \"(cd packages/web && tsc -w)\" \"(cd packages/web && nodemon --inspect dist/index.js --watch .. /)\""
    
    ...
    
    我想持续构建共享包(生成dist/index.js和.ts文件),并在../(packages文件夹)中发生更改后在nodemon中重新启动服务器

    几个小时后,我放弃了重新加载代码的机会,并尝试通过我能找到的“最简单的方法”——在
    共享中没有包,而是通过以下方式直接包含代码:

    // shared/index.ts
    export const createConnection = () => ....
    
    // web/index.ts
    import { createConnection } from 'shared'
    
    看起来它也不起作用:

    // tsconfig.json
    
    {
      "extends": "../../tsconfig.settings.json",
      "compilerOptions": {
        "rootDir": "../",
        "outDir": "dist",
        "baseUrl": "./",
        "paths": {
          "shared":  [ "../shared/src/" ]
        }
      }
    }
    
    现在的问题是:

    File /shared/src/index.ts is not listed within the file list of the project in tsconfig.json. Projects must list all files or use an 'include' pattern.
    
    下一步是(显然):

    这管用!没有错误,但“dist”中也没有文件。。。哈哈


    我很确定,有一些很好的解决方案,例如,或者它也不起作用,但我无法找到或构建它。

    如果我错了,请纠正我的错误,但您需要一个示例,其中项目被分离到monorepository中的包,用Typescript编写,并且一些包相互依赖。 如果是这样,我创建了这样的项目。我使用了Typescript的一个新特性:项目引用。您可以在配置文件中指定其他tsconfig,并为它们定义依赖项。例如:包B依赖于包A。Typescript将编译B并在开始编译A之前使用其声明

    下面是tsconfig的一个小示例

    
    {
      "extends": "../../tsconfig.json",
      "compilerOptions": {
        "rootDir": "src",
        "outDir": "lib"
      },
      "include": ["src"],
      "exclude": ["lib"],
      "references": [{ "path": "../util" }, { "path": "../crud-request" }]
    }
    
    您可以在此处获得更多信息:

    我以这个项目为例构建了自己的项目,也许它也会对您有用:

    
    {
      "extends": "../../tsconfig.json",
      "compilerOptions": {
        "rootDir": "src",
        "outDir": "lib"
      },
      "include": ["src"],
      "exclude": ["lib"],
      "references": [{ "path": "../util" }, { "path": "../crud-request" }]
    }