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
、CommonJSinner.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"
};
問題を示す完全な複製可能なリポジトリがあります。