NPM软件包导出路径定义



我正在生成我的第一组NPM软件包,以支持反应本地环境。我希望以一种本质上有条理的内容来配置包装,并且可以通过客户端的导入语句轻松区分。

给定的4个函数定义在我的NPM软件包中定义(软件包名称:超酷 - 动物):

snakes.ts

export function Boa() {}
export function Anaconda() {}

birds.ts

export function Pigeon() {}
export function Hawk() {}

我希望图书馆的消费者能够安装库:

npm install --save super-cool-animals

然后以此为导入:

import { Boa, Anaconda } from 'super-cool-animals/snakes'
import { Pigeon, Hawk } from 'super-cool-animals/birds'
Pigeon();  // direct access to the function!

我很难确定实现这一目标的适当机制,我相信我已经在某些环境(即Angular)中看到了这种机制

我已经看到了一些建议,允许您使用 index.ts.ts 文件将它们合并为一个变量:

蛇/index.ts

export * from './snakes.ts'

birds/index.ts

export * from './birds.ts

./index.ts

import * as Birds from './birds'
import * as Snakes from './snakes'
export { Birds, Snakes}

但这有一个丑陋的最终结果,您现在必须引用容器以获取该功能:

图书馆的消费者:

import { Birds } from 'super-cool-animals';
Birds.Pigeon();

任何协助都将不胜感激。谢谢。

事实证明答案非常简单,让我们以我们的示例假设您要通过动物类型分解的每个类别,但是您只希望安装一个包装。

> super-cool-animals
    > snakes
        anaconda.js
        boa.js
        package.json
        index.js
    > birds
        hawk.js
        pigeon.js
        package.json
        index.js
    package.json
    readme.md
    index.js

每个索引文件只是在该级别上进行引起的文件或功能的导出

index.js

import * as Birds from './birds'
import * as Snakes from './snakes'
export { Birds, Snakes}

蛇/index.js

export * from './anaconda.js'
export * from './boa.js'

birds/index.js

export * from './hawk.js'
export * from './pigeon.js'

现在转到 package.json 文件:顶级软件包文件描述了任何依赖项,作者,要用于导入的库的名称。动物 - 特定 - 特定 - Package.json 文件只需描述要导入的库的名称。

package.json

{
  "name": "super-cool-animals",
  "version": "1.0.0",
  "description": "Super cool animal library",
  "main": "index.js",
  "author": "Kevin Quinn <glorifundel@gmail.com>",
  "license": "MIT",
  "dependencies": {},
  "peerDependencies": {},
  "devDependencies": {}
}

在较低层发现的包装文件(鸟和蛇文件夹)只是描述了可用的相对路径。

snakes/package.json

{
  "name": "super-cool-animals/snakes",
  "main": "index.js"
}

birds/package.json

{
  "name": "super-cool-animals/birds",
  "main": "index.js"
}

有了所有定义,您现在可以安装NPM软件包,客户端可以很好地定义其导入:

import { Hawk } from 'super-cool-animals/birds';
const SomeBird = Hawk();

不确定这是否是最好的解决方案,但它似乎对我起作用,希望它对某人有帮助,如果有更好或更清洁的解决方案,请发布它,我很乐意接受更好的答案,或更新我自己的答案。

相关内容

  • 没有找到相关文章

最新更新