从NPM包导出多个模块

j91ykkif  于 2023-02-04  发布在  其他
关注(0)|答案(3)|浏览(206)

我有一个使用Node和Typescript的大型项目A,在项目A中我有很多不同的模块,我想在另一个项目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文件夹中:

  • 距离
  • moduleA.js
  • moduleA.map
  • moduleA.d.ts
  • moduleB.js
  • moduleB.map
  • moduleB.d.ts
  • ....

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

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

我使用yarn工作空间将项目A作为项目B中的一个包来访问。但问题是,当我在新项目B中使用import {ModuleA} from 'projectA'时,我只能访问moduleA。那么,我如何才能从项目A访问更多模块呢?

piok6c0g

piok6c0g1#

简单地将所有导出合并到一个index.ts中对您有用吗?
json包(项目A):

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

索引.ts(项目A):

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

项目B中的某个模块:

import {ModuleA, ModuleB} from 'projectA'
rdlzhqv9

rdlzhqv92#

我相信你要找的是:https://nodejs.org/api/packages.html#packages_package_entry_points
不清楚TypeScript当前是否支持:https://github.com/microsoft/TypeScript/issues/33079
看起来你确实可以在你的包里放一些像这样的东西来解决这个问题。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/"
    },

    ...
}
eyh26e7m

eyh26e7m3#

在你的tsconfig.json中尝试compilerOptions.moduleResolution = 'node16'
下面是文档的链接https://www.typescriptlang.org/tsconfig#moduleResolution

相关问题