Кросс-стандартный экспорт модуля
Всем привет! На волне восхождения 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 {}
});
Как объединить все три подхода, не прибегая к хакам, ломающим транспилеры и минификаторы? |
Цитата:
// Декларируем явное использование ES5 'use strict'; Для получения ссылки на глобальный объект можно использовать (т.к. в ES6 нет глобальной ссылки this):
new Function('return this')()
Такая функция по умолчанию скомпилится в ES3 и вернёт ссылку на global / window. *** https://github.com/umdjs/umd |
Цитата:
Цитата:
|
UMD (Universal Module Definition) patterns for JavaScript modules that work everywhere
Цитата:
kobezzza, йо. не заметил ) |
Цитата:
|
Цитата:
|
Цитата:
FINoM, у меня в этом репе грантом собираются intro.js + module.js + outro.js получается то, что тебе нужно. |
Цитата:
|
FINoM, CommonJS есть
export default lib; насколько я понимаю. Т.е. если у тебя есть "обвеска" AMD & CommonJS, то импорт es6 будет работать. |
| Часовой пояс GMT +3, время: 18:14. |