azproduction / autopolyfiller

Autopolyfiller — Precise polyfills. This is like Autoprefixer, but for JavaScript polyfills.
http://azproduction.github.io/autopolyfiller
MIT License
550 stars 15 forks source link

Collections of polyfills #15

Open azproduction opened 10 years ago

azproduction commented 10 years ago

Issues

So plugins for Autopolyfiller is a really good idea. Now I can group them into "3 channels"

monolithed commented 9 years ago

Maybe you'd pay attention to Polyfiller :)

azproduction commented 9 years ago

@monolithed awesome! That is I really need:

var polyfiller = new Polyfiller();
var list = polyfiller.find([ 'Promise', 'Fetch', 'URL' ]);

One question, are these polyfills cross-browser?

monolithed commented 9 years ago

У меня была задача собрать полифилы, которые теоретически совместимы с IE9 (очень трудоемко поддерживать более ранние версии, поэтому я добавил возможность указать директорию для пользовательских полифилов).

Есть планы подключить core-js, но пока нет возможности это сделать более или менее адекватно (есть вопросы к самому API и покрытию тестами).

Ад какой-то:

require('core-js');
require('LiveScript');
require('core-js/build/build')({
  modules: ['es6', 'core.dict'],
  blacklist: ['es6.reflect'],
  library: false, 
}, console.log.bind(console));

Также хочу обратить внимание, что пока доступны не все ES6-полифилы. Постепенно буду добавлять оставшиеся из es-shims (неохота их собирать самостоятельно).

zloirock commented 9 years ago

@monolithed тащемта, сборка из js упрощена - удалены зависимости, нужен только webpack. Говорил же, что это был не публичный API. Есть вопросы по тестам - задавайте, а лучше, если чего-то не видите, добавляйте. Вопросы по API - задавайте, предлагайте улучшения, в чём проблема? :)

monolithed commented 9 years ago

@zloirock, хм. похоже я пропустил это. Отлично! Меня интересует как собрать модуль без зависимостей, т.е. когда я запрашиваю Array.from, то мне не нужно включать в сборку Symbols или что-то из ES5. Реально? :) Также хотелось бы в колбеке получить массив всех полифилов, которые вошли в сборку.

zloirock commented 9 years ago

@monolithed к сожалению, на данный момент это API только для сборки по модулям, для максимальной гибкости, а не по фичам. Самый простой способ узнать, что нужно включить в сборку - посмотреть зависимости в commonjs точках входа. Symbol не является зависимостью Array.from, только итератор строки (с массивами он и так работает полностью корректно). А вот с ES5 проблема - модуль ES5 (порядка 4кб после минификации, если не ошибаюсь) придётся включать полностью для ES3 окружений, он не разбит на составляющие. Итого - ['es6.array.from', 'es6.string.iterator'] для ES5 окружения, ['es5', 'es6.array.from', 'es6.string.iterator'] для ES3.

Ну или можно не заморачиваться с этим API и зависимостями, а просто натравить commonjs сборщик на необходимые точки входа.

monolithed commented 9 years ago

@zloirock,

к сожалению, на данный момент это API только для сборки по модулям, а не по фичам.

Если на уровне директории modules, то ок, там вроде только Math одним файлом. Тогда остается только колбек со списком включенных в сборку полифилов, чтобы можно было у себя исключать дубликаты. С этим могут быть сложности? :)

zloirock commented 9 years ago

@monolithed es6.reflect, es6.math, es6.number.statics - они будут разделены в следующей версии. es5 пока разделять не собираюсь, создаст лишние проблемы. Ну а всё остальное разбито насколько можно.

monolithed commented 9 years ago

@zloirock, а es5 опциональный модуль? Если нет, то в каких случаях он может попасть в сборку?

zloirock commented 9 years ago

@monolithed es5 само собой опциональный, но для ES3 окружений нужен в любом случае.

Что касается колбека - в JS API вы и так передаёте список необходимых модулей / пространств имён, сборкой занимается webpack, но дополнительно подключает только внутренние модули. Ну а если собирать используя точки входа фич - тут уж смотря чем собираете, с задачей не сталкивался, нужно смотреть =)

monolithed commented 9 years ago

@zloirock

Что касается колбека - в JS API вы и так передаёте список необходимых модулей / пространств имён, сборкой занимается webpack, но дополнительно подключает только внутренние модули.

А может ли получится какой-то модуль будет требовать другой модуль?

zloirock commented 9 years ago

@monolithed модули - если не ошибаюсь, нет. Только внутренние. Зависимости обозначены в точках входа, как в примере с итератором строки для Array.from.

monolithed commented 9 years ago

@zloirock, ну тогда ок, спасибо!