如何使用子模块分发es6软件包

时间:2020-03-22 20:44:50

标签: javascript node.js npm

我正在尝试在npm上发布软件包。我不确定如何表达我的意图。也许包装“子模块”?

缩写的目录结构是:

- package.json
- src/
  - a.js
  - b.js
- dist/
  - a.js
  - b.js

我的构建脚本使用Babel转换为dist目录中具有相同模块的src/目录。我想要 使用者从a.js模块导入函数,如下所示:

import {foo} from "mypackage/a";

不是

import {foo} from "mypackage/dist/a";

如果我将index.js添加到mypackage/并导出a可以

import {a} from "mypackage"

但这不是我想要的...

发布包的标准方法是什么,这样可以像这样导入“子模块”,或者有人可以将我指向执行此类操作的存储库?

1 个答案:

答案 0 :(得分:1)

据我了解,应该有两个选择。

首先,让我尝试解释Node如何处理带有斜杠的Node子模块。 当您使用斜杠导入模块时,Node会尝试在根文件夹中查找斜杠后指定名称的文件。您的情况将是a.js。如果未找到任何内容,Node将尝试查找包含文件a的名为index.js的目录。如果找不到文件,则不会导入任何文件。

回到问题所在,您可以在包含以下导出内容的根文件夹中创建文件a.js

export * from './dist/a';
// The traditional export should look like this, in case I have wrong ES6 export
module.exports = require('./dist/a')

或稍微更改项目的结构,因此文件ab位于它们的特定目录中。

例如:

- package.json
- src/
  - a.js
  - b.js
- a/
  - index.js
- b/
  - index.js