这是我第一次尝试使用TypeScript创建npm包,我遇到了一些麻烦,可能是因为我误解了文档后面的一些内容。在写这篇文章的时候,我使用的是Node 16.16.0和npm 8.13.2。
首先,我的项目结构看起来像这样。
src/
├─ module1/
│ ├─ index.ts
├─ module2/
│ ├─ index.ts
package.json
tsconfig.json
临时配置json
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
"esModuleInterop": true,
"declaration": true,
"outDir": "./lib",
"strict": true
},
"include": ["src"],
"exclude": ["node_modules", "**/__tests__/*"]
}
包.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";
我怎样才能实现这种模式呢?如果有的话,我可以改进它或者遵循更好的实践吗?
1条答案
按热度按时间yxyvkwin1#
就我个人而言,在我运行Typescript 4.7+的一个项目中,以下代码起作用了:你所需要的是
package.json
中的typesVersions
属性.(参见http://www. typescriptlang. org/docs/handbook/declaration-files/publishing. html #版本选择-with-类型版本)我将从上面的文档中抽出这句话作为相关内容:
如果typesVersions中的字段都不匹配,TypeScript将返回到types字段,因此这里TypeScript 3.0和更早版本将被重定向到[... ]/node_modules/package-name/index.d.ts。
这实际上意味着,如果
package.json
中未定义typesVersions
字段,则使用types
字段,但当exports
具有多个导出路径时,types
字段对我们没有帮助。希望这有帮助!