【问题标题】:Packaging sub-modules with rollup for node使用汇总的节点打包子模块
【发布时间】:2017-02-19 20:45:36
【问题描述】:

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

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

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

import {func1} from 'lib/my_package/file1'
import {func3} 'lib/my_package/sub_module1/file3'

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

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

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

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

据我了解,我必须包含一个包含所有 export from 机制的顶级文件。我只能导入那个单一的顶级文件。

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

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

【问题讨论】:

    标签: javascript node.js rollupjs


    【解决方案1】:

    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 模块。

    【讨论】:

    • 确实,这是正确的。我想补充一点,package.json 不应该有主条目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2023-02-15
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    相关资源
    最近更新 更多