Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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 - Три возможности
Ответить с цитированием
  #2 (permalink)  
Старый 28.01.2015, 12:04
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
Как экспортировать модуль не прибегая к синтаксису ES 2015?
// Декларируем явное использование ES5
'use strict';


Для получения ссылки на глобальный объект можно использовать (т.к. в ES6 нет глобальной ссылки this):

new Function('return this')()


Такая функция по умолчанию скомпилится в ES3 и вернёт ссылку на global / window.

***

https://github.com/umdjs/umd
__________________
kobezzza
code monkey
Ответить с цитированием
  #3 (permalink)  
Старый 28.01.2015, 12:10
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от kobezzza
Для получения ссылки на глобальный объект можно использовать (т.к. в ES6 нет глобальной ссылки this):
Хм, не знал. Спасибо.
Сообщение от kobezzza
https://github.com/umdjs/umd
Нагуглил после того, как написал пост
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #4 (permalink)  
Старый 28.01.2015, 13:35
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

UMD (Universal Module Definition) patterns for JavaScript modules that work everywhere


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

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

Сообщение от melky
это просто еще одна система модулей - SystemJS
Дык, а как сделать экспорт?
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #6 (permalink)  
Старый 28.01.2015, 14:53
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от FINoM Посмотреть сообщение
Дык, а как сделать экспорт?
не разбирался особо, но ... вроде, он сам подхватит файл при сборке, а в своем модуле ты используешь amd\cjs. но я не уверен
Ответить с цитированием
  #7 (permalink)  
Старый 28.01.2015, 14:56
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от FINoM
пика популярности 6to5
вангую, что пик впереди

FINoM, у меня в этом репе грантом собираются
intro.js + module.js + outro.js

получается то, что тебе нужно.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #8 (permalink)  
Старый 28.01.2015, 15:40
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от nerv_
получается то, что тебе нужно.
Мне не собрать нужно. Нужно как-то сделать универсальный экспорт. Вопрос не решен только для ES2015. Пока что, кроме эвала строки, ничего не придумал.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #9 (permalink)  
Старый 28.01.2015, 15:49
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

FINoM, CommonJS есть
export default lib;

насколько я понимаю. Т.е. если у тебя есть "обвеска" AMD & CommonJS, то импорт es6 будет работать.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая загрузка модуля + расширение функционала главного модуля Aries Angular.js 1 13.11.2013 21:11