2

我正在向 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/. 我有一个可行的解决方案,但似乎太复杂了。这是有效的:

  1. 在 package.json 中,移除main typesandfiles键。
  2. 删除或清空index.ts
  3. 要发布简单的替换npm publish为以下步骤:
    • 复制 package.json 并将其粘贴到/lib文件夹中
    • cd 进入/lib文件夹并运行npm pack并记下创建的 tarball 的名称
    • npm publish {{TARBALL_NAME}}
    • cd 备份到项目根目录

因此,已发布的包在安装后具有以下文件夹结构:

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

有没有更简单的方法来完成我所追求的?

4

0 回答 0