新package.json '汇出'字段无法使用TypeScript

pdkcd3nj  于 2022-11-26  发布在  TypeScript
关注(0)|答案(3)|浏览(133)

Node.js的13.2版本允许ESM模块和一个新的package.json字段(称为exports)选择和重写导出的文件。
在13.2之前,我使用以下命令从库的dist文件夹导入文件:

import myfile from 'mylibrary/dist/myfile'

在13.2中,我在package.json中添加了以下内容:

exports: {
    "./": "./dist/"
}

并尝试导入具有以下内容的文件:

import myfile from 'mylibrary/myfile'

但是Typescript会引发2307错误,指出找不到该模块。

a2mppw5e

a2mppw5e1#

这是Typescript 4.5即将推出的一项功能,很快就会推出:

// package.json
{
    "name": "my-package",
    "type": "module",
    "exports": {
        ".": {
            // Entry-point for `import "my-package"` in ESM
            "import": "./esm/index.js",

            // Entry-point for `require("my-package") in CJS
            "require": "./commonjs/index.cjs",

            // Entry-point for TypeScript resolution
            "types": "./types/index.d.ts"
        },
    },

    // CJS fall-back for older versions of Node.js
    "main": "./commonjs/index.cjs",

    // Fall-back for older versions of TypeScript
    "types": "./types/index.d.ts"
}

现在,我已经设法利用了typesVersions

"main": "dist/index.js",
  "types": "dist/index.d.ts",
  "exports": {
    ".": "./dist/index.js",
    "./svg": "./dist/svg.js",
    "./html": "./dist/html.js",
    "./package.json": "./package.json"
  },
  "typesVersions": {
    "*": {
      "svg": ["dist/svg.d.ts"],
      "html": ["dist/html.d.ts"]
    }
  }
hsvhsicv

hsvhsicv2#

需要在TypeScript端进行一些工作来支持此功能。该功能被跟踪here in github。在该链接中还列出了一些解决方法。

xe55xuns

xe55xuns3#

在其他答案的基础上,我的package.json中的这个模块对我很有效:

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

我的tsconfig.json如下所示:

{
    "extends": "@tsconfig/node14/tsconfig.json",
    "include": ["src/**/*"],
    "compilerOptions": {
        "lib": ["es2020", "dom"],
        "declaration": true,
        "outDir": "dist",
        "module": "ESNext"
    }
}

这是我的文件结构:

package.json
tsconfig.json
dist/ // and all its subfolders
src/
  generate/
    index.ts
  types/
    index.ts
  index.ts

另外,我使用的是TypeScript 4.7.4。据说这个版本支持exports字段,但它对我不起作用。但这个(可能过于复杂)解决方案对我起作用了。

相关问题