我正在向 NPM 发布一个库。该库是用 Typescript 编写的,Typescript 编译的结果放在一个lib/
文件夹中。主文件是一个index.ts
导出我的公共 API 的文件:
export * from './functions';
export * from './models';
在 package.json 中,我指定:
{"main": "lib/index.js", "types": "lib/index.d.ts", "files": ["lib/**/*"]}
一旦我的包发布并安装在其他地方,它的文件夹结构是:
lib/
index.js
index.d.ts
functions/
index.ts
my-function.ts
models/
index.ts
my-model.ts
消费者从包根目录导入所有内容:
import {someFunction, SomeModel} from 'a-library';
这行得通,但我喜欢隔离路径的想法。一种方法用于功能,另一种用于模型。目前,如果我删除顶级索引,导入将被隔离,但它们现在包含lib/
我不想要的路径中的文件夹:
import {someFunction} from 'a-library/lib/functions';
import {SomeModel} from 'a-library/lib/models';
我实际上想要完成的是相同的,但没有lib/
. 我有一个可行的解决方案,但似乎太复杂了。这是有效的:
- 在 package.json 中,移除
main
types
andfiles
键。 - 删除或清空
index.ts
- 要发布简单的替换
npm publish
为以下步骤:- 复制 package.json 并将其粘贴到
/lib
文件夹中 - cd 进入
/lib
文件夹并运行npm pack
并记下创建的 tarball 的名称 - 跑
npm publish {{TARBALL_NAME}}
- cd 备份到项目根目录
- 复制 package.json 并将其粘贴到
因此,已发布的包在安装后具有以下文件夹结构:
functions/
index.ts
my-function.ts
models/
index.ts
my-model.ts
因为事情不再嵌套在lib/
消费者可以按照我的意愿导入的目录中:
import {someFunction} from 'a-library/functions';
import {SomeModel} from 'a-library/models';
问题是打包和发布来完成这件事似乎太麻烦了。当我的队友一直在跑步时,我永远不会让他们进入一个 3 或 4 步的过程npm publish
。
有没有更简单的方法来完成我所追求的?