Показать сообщение отдельно
  #1 (permalink)  
Старый 28.01.2015, 11:31
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Кросс-стандартный экспорт модуля
Всем привет! На волне восхождения EcmaScript 2015 и пика популярности 6to5 хотелось бы добавить в свою библиотеку кросс-стандартный экспорт.
AMD
(function (root, factory) {
    if (typeof define == 'function' && define.amd) {
        define(factory);
    } else {
        root.lib = factory();
    }
}(this, function (){
	return {}
});


CommonJS
if( typeof module != 'undefined' && module ) {
	module.exports = lib;
}


ES 2015
export default lib;

Как экспортировать модуль не прибегая к синтаксису ES 2015? Глобальное пространство имен System, исходя из того, что я нашел в интернете, не содержит функции export, только import.

Я могу прибенгуть к эвалу
try {
	Function( 'lib', 'export default lib;' )( lib );
} catch( e ) {}

Но такой подход не позволит работать сборщикам проекта.


Пока могу догадаться, как обхединить первые два подхода:
(function (root, factory) {
    if (typeof define == 'function' && define.amd) {
        define(factory);
    } else {
		if( typeof module != 'undefined' && root === module ) {
			root.exports = factory();
		} else {
			root.lib = factory();
		}
    }
}(this, function (){
	return {}
});


Как объединить все три подхода, не прибегая к хакам, ломающим транспилеры и минификаторы?
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием