簡體   English   中英

如何使用 TypeScript 在 package.json 上正確使用導出和子路徑?

[英]How to correctly use exports and subpaths on package.json using TypeScript?

這是我第一次嘗試使用 TypeScript 創建 npm package,我遇到了一些麻煩,可能是因為我誤解了文檔后面的內容。 在撰寫本文時,我正在使用 Node 16.16.0 和 npm 8.13.2。

首先,我的項目結構是這樣的。

src/
├─ module1/
│  ├─ index.ts
├─ module2/
│  ├─ index.ts
package.json
tsconfig.json

tsconfig.json

{
  "compilerOptions": {
    "target": "es2017",
    "module": "commonjs",
    "esModuleInterop": true,
    "declaration": true,
    "outDir": "./lib",
    "strict": true
  },
  "include": ["src"],
  "exclude": ["node_modules", "**/__tests__/*"]
}

package.json

{
  "name": "@owner/mypackage",
  "version": "v1.0.0",
  ...
  "files": [
    "lib/**/*"
  ],
  "type": "module",
  "exports": {
    "./module1": "./lib/module1/index.js",
    "./module2": "./lib/module2/index.js",
    "./package.json": "./package.json"
  }
}

問題是,在發布模塊時,它會生成以下結構:

lib/
├─ module1/
│  ├─ index.js
├─ module2/
│  ├─ index.js
package.json

給我留下以下導入結構:

import {Foo} from "@owner/mypackage/lib/module1";

而不是所需的:

import {Foo} from "@owner/mypackage/module1";

我怎樣才能實現這種模式? 而且,如果有,我可以改進它或遵循更好的做法嗎?

就我個人而言,在我運行Typescript 4.7+的項目中,以下方法有效:您需要的是package.json中的typesVersions屬性。 (參見https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html#version-selection-with-typesversions

我將從上面的文檔中提取這句話作為相關性:

好吧,如果 typesVersions 中的任何字段都沒有匹配,TypeScript 會回退到types 字段,所以這里 TypeScript 3.0 和更早版本將被重定向到 [...]/node_modules/package-name/index.d.ts。

這實質上意味着,如果typesVersions字段未在package.json中定義,則使用types字段,但當具有多個導出路徑時, types字段對我們沒有幫助exports

希望這可以幫助!

{
  "exports": {
    "./module1": "./lib/module1/index.js",
    "./module2": "./lib/module2/index.js",
  },
  "typesVersions": {
     "*": {
       "module1": ["lib/module1/index.js"],
       "module2": ["lib/module2/index.js"]
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM