Кросс-стандартный экспорт модуля
Всем привет! На волне восхождения 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, время: 08:36. |