2016-08-18 3 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"; 

 Смежные вопросы

  • Нет связанных вопросов^_^