[英]How to properly expose subpaths in package.json using the ”exports” key?
[英]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.