5

我有一个使用 Node 和 Typescript 的相当大的项目 A。在项目 AI 中有很多不同的模块,我想在另一个项目 B 中重用它们。

因此我用这个 tsconfig.json 构建了项目 A:

{
    "compilerOptions": {
        "target": "es2017",
        "module": "commonjs",
        "declaration": true,
        "outDir": "./dist",
        "sourceMap": true,
        "strict": true,
        "noImplicitAny": true,
        "strictNullChecks": true,
        "typeRoots": ["./node_modules/@types", "./modules/@types"]
    },
    "exclude": ["node_modules"]
}

所以所有文件都以这种方式构建到 /dist 文件夹中:

  • 距离
    • 模块A.js
    • 模块A.map
    • 模块ADTS
    • 模块B.js
    • 模块B.map
    • 模块B.d.ts
    • ……

为了在另一个项目中使用这些 moduleA 和 moduleB,我将以下内容添加到项目 A 中的 package.json 中:

    "name": "projectA",
    "version": "1.0.0",
    "description": "...",
    "main": "dist/moduleA.js",
    "typings": "dist/moduleA.d.ts",

import {ModuleA} from 'projectA'我使用纱线工作区将项目 A 作为项目 B 中的一个包进行访问。但问题是在我的新项目 B 中使用时我只能访问模块A?那么如何从 ProjectA 访问更多模块呢?

4

2 回答 2

5

简单地将所有出口合并为一个index.ts对您有用吗?

包.json(项目A):

{
  "main": "dist/index.js",
  "typings": "dist/index.d.ts",
  ...
}

index.ts(项目A):

// Adjust the relative import paths 
// and identifiers to your structure
export { ModuleA } from "./moduleA";
export { ModuleB } from "./moduleB";

projectB中的一些模块:

import {ModuleA, ModuleB} from 'projectA'
于 2019-08-15T22:15:49.857 回答
4

我相信您正在寻找的是: https ://nodejs.org/api/packages.html#packages_package_entry_points

不清楚 TypeScript 当前是否支持它: https ://github.com/microsoft/TypeScript/issues/33079

看起来你可以在你的 package.json 中使用类似这样的东西来解决它:

{
    ...

    "main": "./dist/index.js",
    "types": "./dist/index.d.ts",
    "typesVersions": {
        "*": {
          "dist/index.d.ts": [ "dist/index.d.ts" ],
          "*": [ "dist/*" ]
        }
      },
    "exports": {
        ".": "./dist/index.js",
        "./": "./dist/"
    },

    ...
}
于 2021-06-27T15:33:57.707 回答