如何NPM发布以便消费者可以从不同的顶级目录导入

Bee*_*ice 6 node.js npm typescript npm-publish npm-pack

我正在向 NPM 发布一个库。该库是用Typescript编写的,Typescript编译的结果放在一个lib/文件夹中。主文件是index.ts导出我的公共 API 的文件:

export * from './functions';
export * from './models';
Run Code Online (Sandbox Code Playgroud)

在 package.json 中,我指定:

{"main": "lib/index.js", "types": "lib/index.d.ts", "files": ["lib/**/*"]}
Run Code Online (Sandbox Code Playgroud)

一旦我的包发布并安装在其他地方,它的文件夹结构是:

lib/
  index.js
  index.d.ts
  functions/
    index.ts
    my-function.ts
  models/
    index.ts
    my-model.ts
Run Code Online (Sandbox Code Playgroud)

消费者从包根目录导入所有内容:

{"main": "lib/index.js", "types": "lib/index.d.ts", "files": ["lib/**/*"]}
Run Code Online (Sandbox Code Playgroud)

这可行,但我喜欢隔离路径的想法。一种用于函数,另一种用于模型。目前,如果我删除顶级索引,导入将被隔离,但它们现在包含lib/我不想要的路径中的文件夹:

lib/
  index.js
  index.d.ts
  functions/
    index.ts
    my-function.ts
  models/
    index.ts
    my-model.ts
Run Code Online (Sandbox Code Playgroud)

我实际上想要完成的事情是相同的,但没有lib/. 我有一个可行的解决方案,但它似乎太复杂了。这是有效的:

  1. 在 package.json 中,删除main typesfiles键。
  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
Run Code Online (Sandbox Code Playgroud)

因为东西不再嵌套在lib/目录中,所以消费者可以按照我的意愿导入:

import {someFunction, SomeModel} from 'a-library';
Run Code Online (Sandbox Code Playgroud)

问题是打包和发布来完成这个任务似乎太麻烦了。当我的队友一直在跑步时,我永远不会让他们进入 3 或 4 步的过程npm publish

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