javascript - 如何导出类型定义并通过本地包的 npm 链接使用它们?

标签 javascript typescript npm typescript-typings npm-package

我正在创建一个名为 tepper 的 super 测试替代方案。我正在尝试将包发布为 ESM 和 CJS。我遇到的问题是库的使用者无法找到类型定义。

为了测试它,我创建了一个脚本(您可以找到它 here ),它生成一个全新的 NestJS 项目,并尝试通过使用相对路径在本地安装它来使用该库(npm install --save-dev ../../../..)

问题是我遇到了TS2307:找不到模块“tepper”或其相应的类型声明错误(here您可以在 Github Actions 上看到该错误)。

我已导出 package.json 中的类型正如我所料:

{
  "exports": {
    ".": {
      "types": "./dist/types/tepper.d.ts",
      "require": "./dist/cjs/tepper.js",
      "import": "./dist/esm/tepper.js",
      "default": "./dist/esm/tepper.js"
    }
  }
}

谢谢!

最佳答案

关键点是tsconfig中的resolvePackageJsonExports。引用https://www.typescriptlang.org/tsconfig#resolvePackageJsonExports .

在您的项目中,由于 moduleResolutionmodule 的值而未启用它。所以你有两个选择,

    1. 在文件 test/e2e/nestjs/project-name/tsconfig.json 中,设置以下内容。
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "resolvePackageJsonExports": true,
  • 在tepper的主packages.json中使用经典的types字段,可以避免由于moduleResolutionmodule的变化而影响其他事情.
"types": "./dist/types/tepper.d.ts",

关于javascript - 如何导出类型定义并通过本地包的 npm 链接使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77304312/

相关文章:

javascript - 计算一个静态输入字段和三个动态创建的输入 jQuery

javascript - TypeError : navigator. currentLang 不是函数

typescript - 使用TS客户端@pinecone-database/pinecone v0.0.8时出现错误 "PineconeClient: Project name not set. Call init() first."

node.js - 如何以本地用户身份在 Windows 上安装 NodeJS LTS(没有管理员权限)

javascript - Aurelia:如何使用 npm 包中的 View / View 模型?

javascript - 像 http ://vimeo. com/这样的导航菜单

javascript - Dojo 数据网格 : set conditionally editable column (change at runtime)

javascript - 点击链接后 Jquery 类被删除,但第二次点击仍然可以识别

asp.net-mvc - 如何将 TypeScript 构建为独立于 MVC 项目并依赖于 MVC 项目的项目,并将生成的 JavaScript 复制到 MVC 项目中?

node.js - Node ExpressJS-events.js : 167 throw er Unhandled error event