打包节点的子卷模块

时间:2017-02-19 20:45:36

标签: javascript node.js rollupjs

我有一个库(ES6),它由许多子模块组成,比如说

string url = string.Format("http://netflixroulette.net/api/api.php?actor={0}", ator);
            var response = await client.GetAsync(url);

我目前正在进行这样的导入(全部在我的包中 - 使用文件解析来查找,而不是node_modules解析):

- package.json
- lib
  - my_package
    - file1.js
    - file2.js
    - sub_module1
      - file3.js
      - file4.js

因此,实际上我在子目录中有多个文件

我现在正在尝试打包并发布我的库,它将安装在node_modules下。

在我看来,节点解析算法(当在node_modules之后)只允许一个入口点(并且没有任何汇总可以做到这一点)

我希望能够包含许多子目录和文件,并且可以单独解析它们。

据我所知,我必须包含一个包含所有import {func1} from 'lib/my_package/file1' import {func3} 'lib/my_package/sub_module1/file3' 机制的顶级文件。我只能导入该单个顶级文件。

这意味着必须手动创建该文件。它还意味着丢失来自目录结构的所有子模块名称结构。

我想知道:有没有办法可以直接从node_module导入任何其他文件?

1 个答案:

答案 0 :(得分:2)

Node的解析算法只解析模块源的第一部分,所以如果有人这样做......

var foo = require('your-library/subdir/foo.js');

...然后Node(或Browserify / Webpack / rollup-plugin-node-resolve)将正确解析为

/path/to/project/node_modules/your-library/subdir/foo.js

棘手的部分是你想要编写JavaScript模块,但如果有人在Node中使用你的库,那么他们需要CommonJS模块。 Rollup在这里无法帮助您 - 您需要为每个模块进行一对一的ESM-> CJS转换。所以这意味着要么使用Babel,要么首先编写CommonJS模块。