2016-08-18 48 views
0

我有一个CommonJS的模块,称为inner.js,其定义了一个函数,然后作为整个模块起作用的出口:与CommonJS模块汇总导出一个未命名的功能作为模块?

// inner.js, a legacy CommonJS module 
var foo = function() { return 42; }; 
module.exports = foo; 

在节点,我可以容易地验证此工作原样。

> 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$2 is not a function 
    at Object.bar (/.../so-rollup-question/loadme.js:27:25) 

我想我只是无法正确加载CommonJS模块,这样模块本身就起到了一个函数的作用。我对UMD不够熟悉,无法从检查汇总输出中获得任何有意义的结果。

这篇文章的其余部分是关于一个最小的例子。


这是我很简单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证明的问题。

+2

为什么要那样做,从“./inner.js”'进口*为内;如果''inner.js'仅导出功能?你试过从“./inner.js”导入内部吗? –

+0

@FelixKling虽然我尝试了很多不同的东西排列组合,对我的无知的无知者来说,可能有帮助,但我没有尝试这种简单明了的方法。谢谢。如果您想发表一个答案,我会很乐意并且感激地接受它。 –

回答

3

直接分配给module.exports基本上等同于具有默认导出。因此,导入模块如下应该工作:

import inner from "./inner.js";