2016-09-28 2 views
1

При разработке JS-библиотек, предназначенных для узла, что лучше всего подходит для написания библиотеки, которая использует функции es6, но по-прежнему работает с версиями узлов, которые не поддерживают es6?Разработка библиотеки ускоренных библиотек es6

Например, у меня есть библиотека с открытым исходным кодом, которую я написал пару лет назад в es5, но я хочу ее обновить, чтобы использовать es6. Должен ли я сказать моим пользователям, что если вы хотите использовать мою библиотеку в будущем, вам также нужно обновить версию узла? Какова предпочтительная практика сообщества для решения этой проблемы?

+2

Это полностью зависит от того, какая библиотека это и какие функции она использует. Иногда бывает нормально нажимать пользователей на более поздние версии Node, иногда это не так. Иногда рекомендуется поддерживать предыдущую основную версию для обратной совместимости, иногда это не так. Если функции хорошо переносятся на ES5, у вас всегда есть './Dist' как' main', чтобы вы никого не расстроили. – estus

ответ

2

Например, у меня есть библиотека с открытым исходным кодом, который я написал несколько лет назад в ES5, но я хочу, чтобы обновить его использовать ES6.

Прежде всего, вам нужно решить, будете ли вы продолжать поддерживать версию вашей библиотеки ES5 или нет. Если да, то вы, вероятно, закончите с двумя ветвями вашей библиотеки, которые работают с ES5, и те, которые требуют ES6, и используют возможности ES6. Вам нужно будет решить, сколько усилий вы вложите в версию ES5 и как долго. Предположительно, вы исправили бы значительные ошибки, обнаруженные в этой версии, по крайней мере в течение некоторого периода времени, и, в конце концов, вы забудете эту версию без новых изменений/исправлений.

Если эта библиотека предназначена для node.js в качестве целевой среды, то вы можете просто сразу проверить свою библиотеку ES6, чтобы узнать, доступна ли соответствующая среда при запуске, а если нет, то войдите в консоль и выполните исключение из значимого сообщения в качестве ошибки, чтобы сообщить разработчику, если у них неправильная среда для этой библиотеки.

Если вы не собираетесь продолжать поддерживать версию библиотеки ES5 с дополнительными функциями или исправлениями, то, вероятно, вы должны разветвить ваш репозиторий на последней версии, предназначенной для ES5, чтобы сообщество разработчиков с открытым исходным кодом могло продолжать поддерживать/усовершенствуйте его, если отдельно, если они этого захотят.

Должен ли я сказать своим пользователям, что если вы хотите использовать моя библиотека собирается вперед вы будете версия узла должен быть повышен, а?

Вам не нужно ничего делать. Это зависит от вас, чтобы сделать то, что, по вашему мнению, подходит для вашей библиотеки и вашей ситуации. Поскольку это открытый исходный код, вы также можете подумать о том, что хотят сделать ваши авторы с открытым исходным кодом.

Какова предпочтительная практика сообщества для решения этой проблемы?

Не существует конкретного предпочтения сообщества, которое одинаково хорошо относится ко всем библиотекам или ситуациям. Одной из исходных точек для поддержки node.js является просмотр того, что node.js делает для своих собственных версий, и посмотреть, как долго он поддерживает постоянную поддержку более старых версий. Вам не обязательно быть таким щедрым (это зависит от вашей ситуации), но вам, вероятно, не нужно быть более щедрым, чем сам node.js с поддержкой более старой версии, поскольку на тот момент разработчик будет запускать старую версию node.js, который больше не поддерживает себя. Это взгляд на узел.Поддержка js-версии: https://github.com/nodejs/LTS.

В этой диаграмме вы заметите, что все версии до версии v4 заканчиваются в декабре 2016 года. И были значительные возможности ES6 (не все) в v4, поэтому, если вы могли бы скомпоновать функции ES6 в v4, вероятно, было бы разумно потребовать node.js v4 довольно скоро. Если вы хотите использовать функции ES6, которые находятся только в node.js v6, вам действительно нужно будет опросить свою пользовательскую базу, чтобы узнать, в какой степени это было бы тяжело, если для вашей ветви с новой технологией требуется узел. js v6. node.js v6 сейчас идет LTS (долгосрочная поддержка), так что это действительно начало самого продолжительного цикла поддержки.

+0

Почему downvote? Пожалуйста, объясните, и я улучшу свой ответ. – jfriend00

0

Я недавно использовал babel с плагином transform-runtime, который позволяет использовать вещи во время работы, не мешая другому (возможно, не используя код Babel).

Если вы обнародуете что-то вроде функции async, тогда код, основанный на обещании, сможет получить к нему доступ.

1

Я бы сказал, это зависит от того, какие функции вам нужно использовать, и какие версии узла вы хотите поддерживать. Стоит отметить, что поддержка каждой версии Node до 4.0.0 (при выпуске LTS) заканчивается поддержкой by the end of this year; и многие функции ES6, такие как let/const объявления и поддержка Promise, доступны уже в 4.0.0.

Если вы хотите использовать последний, самый большой JavaScript особенности теперь, то я бы рекомендовал использовать Babel сделать transpilation в ES5 код. Практически все новейшие функции ES6 поддерживаются с помощью плагинов, и вы можете либо скомпилировать beforing публикации пакета для НПМ (или где), или же transpliation во время выполнения с помощью babel-register:

// .babelrc file, babel configuration 
// the "es2015" preset transplies from ES6 to ES5 
// you can also add "es2016" and "es2017" for newer features 
{ 
    "presets": [ "es2015" ], 
    "plugins": [ "transform-runtime" ] 
} 

// index.js file 
require('babel-runtime');   // register babel 

require('./path/to/your/script.js'); // require your own code here, 
            // which will be transplied with babel 

В этой таблице показан отличный обзор того, какие функции ES6 поддерживаются там.
Эта страница содержит некоторую информацию о том, как npm обрабатывает обратную совместимость на основе номеров версий.
Одним из примечательных исключений является ES6 Proxy objects, которые нельзя эмулировать старыми механизмами JavaScript.

Смежные вопросы