使用 CommonJS 模块汇总将未命名函数导出为模块?
Rollup with CommonJS module exporting an unnamed function as the module?
我有一个名为 inner.js
的 CommonJS 模块,它定义了一个函数,然后将该函数导出为整个模块:
// inner.js, a legacy CommonJS module
var foo = function() { return 42; };
module.exports = foo;
在 Node 中,我可以很容易地验证它按原样工作。
> var inner = require('./inner.js');
> inner() // prints 42
但这是我想从 ES6 模块中使用的遗留模块,称为 outer.js
:
// outer.js, an ES6 module
import * as inner from "./inner.js";
export function bar() { return inner(); }
我看到 rollup-plugin-commonjs
通常在这些情况下使用,但是当 CommonJS inner.js
模块将一个函数导出为整个模块时,我无法让它工作。如果在 运行 汇总并将结果转储到 loadme.js
之后,我尝试 运行 加载 ES6 外部模块并尝试调用最初定义在内部 CommonJS 模块中的函数,我得到一个错误:
> var outer = require('./loadme.js')
undefined
> outer.bar()
TypeError: inner is not a function
at Object.bar (/.../so-rollup-question/loadme.js:27:25)
我想我只是没有正确加载 CommonJS 模块,模块本身作为一个函数运行。我对 UMD 不够熟悉,无法从检查汇总输出中获得任何有意义的信息。
此 post 的其余部分是关于最小示例的。
这是我的非常简单的 index.js
:
// index.js
export {bar} from "./outer.js";
由我的汇总配置读取:
// rollup.config.js
import npm from "rollup-plugin-node-resolve";
import commonjs from 'rollup-plugin-commonjs';
export default {
entry : "index.js",
format : "umd",
moduleName : "sphereModule",
plugins : [ npm({jsnext : true}), commonjs() ],
dest : "loadme.js"
};
我有一个 complete clonable repository 证明了这个问题。
直接赋值给module.exports
基本上等同于默认导出。因此按如下方式导入模块应该有效:
import inner from "./inner.js";
我有一个名为 inner.js
的 CommonJS 模块,它定义了一个函数,然后将该函数导出为整个模块:
// inner.js, a legacy CommonJS module
var foo = function() { return 42; };
module.exports = foo;
在 Node 中,我可以很容易地验证它按原样工作。
> var inner = require('./inner.js');
> inner() // prints 42
但这是我想从 ES6 模块中使用的遗留模块,称为 outer.js
:
// outer.js, an ES6 module
import * as inner from "./inner.js";
export function bar() { return inner(); }
我看到 rollup-plugin-commonjs
通常在这些情况下使用,但是当 CommonJS inner.js
模块将一个函数导出为整个模块时,我无法让它工作。如果在 运行 汇总并将结果转储到 loadme.js
之后,我尝试 运行 加载 ES6 外部模块并尝试调用最初定义在内部 CommonJS 模块中的函数,我得到一个错误:
> var outer = require('./loadme.js')
undefined
> outer.bar()
TypeError: inner is not a function
at Object.bar (/.../so-rollup-question/loadme.js:27:25)
我想我只是没有正确加载 CommonJS 模块,模块本身作为一个函数运行。我对 UMD 不够熟悉,无法从检查汇总输出中获得任何有意义的信息。
此 post 的其余部分是关于最小示例的。
这是我的非常简单的 index.js
:
// index.js
export {bar} from "./outer.js";
由我的汇总配置读取:
// rollup.config.js
import npm from "rollup-plugin-node-resolve";
import commonjs from 'rollup-plugin-commonjs';
export default {
entry : "index.js",
format : "umd",
moduleName : "sphereModule",
plugins : [ npm({jsnext : true}), commonjs() ],
dest : "loadme.js"
};
我有一个 complete clonable repository 证明了这个问题。
直接赋值给module.exports
基本上等同于默认导出。因此按如下方式导入模块应该有效:
import inner from "./inner.js";