- PVSM.RU - https://www.pvsm.ru -
Matreshka.js заполняет образовавшуюся за последние годы пропасть между джуном и сеньором
Вышла beta второй версии фреймворка Matreshka.js. Релиз выйдет через неделю (плюс пара дней) после последнего патча, отчет начинается с выходом этого поста. Версию можно считать стабильной, а статус beta — чистой формальностю, так как проект достаточно долго и без серьезных изменений пребывал в статусе prealpha/alpha и проверялся в реальных проектах.
» Репозиторий [1]
» Сайт [2]
Вместо наивного "JavaScript фреймворк для всех", Matreshka.js теперь позиционируется, как "Простой фреймворк для джунов". Позвольте мне, вместо дублирования текста с сайта, разместить ссылку на текст [3], объясняющий этот момент более детально.
const bindNode = require('matreshka/bindnode');
bindNode(object, key, node);
Раньше, для выпуска нового релиза приходилось совершать несколько повторяющихся действий:
Поэтому я не спешил делать релиз, если изменение исправляло проблему, которую можно расценивать как "минорную", а предпочитал накопить список изменений и выпустить новую версию на выходных (конечно, исправления критических проблем, выходили как можно скорее).
Благодаря включению в проект semantic-release [4], использованию Travis CI и другим изменениям (например, удалению русскоязычного changelog), выпуск релизов происходит по очень простой схеме.
Причем, попадание новых фич в сам фреймворк — маловероятно (об этом ниже), поэтому последний и предпоследние пункты можно не учитывать.
После того, как коммит с префиксом fix или feat попадает на Github, происходит следующее:
Не удивляйтесь, если увидете несколько патчей, сделанных в один день (надеюсь, что такие случаи будут редки).
В свою очередь, при любом коммите в репозиторий сайта [6], Travis с помощью PM2 [7] автоматически деплоит сайт на сервер.
Самым крупным изменением стало удаление многих функций, которые были ни к селу, не к городу (например, функция trim).
Почему эти функции вообще существали? Мотивация была простой: они были нужны для внутренних механизмов работы фреймворка и, если эти функции и так есть, почему бы не добавить их в публичное API фреймворка?
Как следствие, документация сильно раздулась, что не самым приятным образом отразилось на простоте знакомства с фреймворком, многие полезные методы терялись в информационном шуме, а возможность убрать такие функции пропала (так как это ломающее изменение).
Начиная со второй версии Matreshka.js включает в себя возможности специфичные для самого фреймворка, но не включает никаких "общих" функций. О конкретных причинах удаления некоторых методов, я писал на форуме [11].
Новые фичи, скорее, будут выходить в виде дополнительных плагинов и библиотек, чем попадать в сам фреймворк (хотя, последнее не исключено).
Изменения API описаны ниже очень кратко, дабы не дублировать текст документации.
(!!!) — ломающие изменения
(!) — ломающие изменения, которые, скорее всего, не повлияют на старые приложения
Matreshka.delayMatreshka#delayMatreshka.defineMatreshka#defineMatreshka.defineSetterMatreshka#defineSetterMatreshka.defineGetterMatreshka#defineGetterMatreshka#getAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverythingMatreshka.trimMatreshka.orderByMatreshka.noopMatreshka.extendMatreshka.eachMatreshka.boundMatreshka#boundMatreshka.$boundMatreshka#$boundMatreshka.boundAllMatreshka#boundAllMatreshka.randomString (теперь живет тут [12])Matreshka.getMatreshka#getMatreshka.deepFindMatreshka.setProtoMatreshka.toArrayMatreshka.versionMatreshka#sandboxMatreshka#$sandboxMatreshka.Object#toNativeMatreshka.Object#toObjectMatreshka.Array#toNativeMatreshka.Array#toArrayMatreshka.binders.file (теперь живет тут [13])Matreshka.binders.dropFile (теперь живет тут [13])Matreshka.binders.dragOver (теперь живет тут [13])Matreshka.Array#eachMatreshka.Array#hasOwnPropertyMatreshka.Array#useBindingsParserMatreshka.Object#hasOwnPropertywindow.Class (используйте Matreshka.Class вместо глобальной переменной)window.$b, Matreshka.$bMatreshka.$matreshka-magicMatreshka.binders.innerHTMLMatreshka.binders.innerTextMatreshka.binders.attributeMatreshka.binders.propertyMatreshka#linkProps -> Matreshka#calcMatreshka.to -> Matreshka.toMatreshkaMatreshka#setClassFor -> Matreshka#instantiateMatreshka.Object#jset -> Matreshka.Object#setData (jset не убран)Matreshka#isMK -> Matreshka#isMatreshkaMatreshka.Object#isMKObject -> Matreshka.Object#isMatreshkaObjectMatreshka.Array#isMKArray -> Matreshka#isMatreshkaArrayMatreshka.useAs$ -> Matreshka.useDOMLibrarybindNode и unbindNode{ key: [node, binder] } больше не поддерживается.([{key, node, binder, event}], commonEventOptions).{key: { node, binder }} and {key: [{ node, binder }]}. (Эврика! Этот синтаксисс позволяет красиво навешать много байндингов одним вызовом bindNode).bind, bind:KEY вызываются на каждую привязанную ноду.unbind, unbind:KEY вызываются на каждую отвязанную ноду.useExactBinder.assignDefaultValue переименован в getValueOnBind.setValueOnBind.debounce удален.debounceSetValue.debounceGetValue.debounceSetValueOnBind.debounceGetValueOnBind.debounceGetValueDelay.debounceSetValueDelay.exactKey вместо deep.За подробностями обратитесь к документации bindNode [14] и unbindNode [15]
destroy.className больше не поддерживает синтаксис с восклицательным знаком. Вместо этого, можно передать false в качестве второго аргумента.bindingOptions для всех методов байндера (например, getValue(bindingOptions) {...}).За подробностями обратитесь к документации bindNode [14] и binders [16]
parseBindingseventOptions вторым аргументом{{штуки}} не заменяются элементом span.{{ скобок }} можно использовать пробелы.За подробностями обратитесь к документации parseBindings [17]
bindSandboxЗа подробностями обратитесь к документации bindSandbox [18]
calc (который раньше назывался linkProps)debounce переименован в debounceCalc.debounceCalc по умолчанию true.debounceCalcOnInit.exactKey.skipLinks переименован в skipCalc для использования в методе set.[inst, key, inst, key] убран.{ target: {source, event, handler} } (Эврика! Можно вызывать метод calc один раз на много свойств).[{object, key}].debounceCalcDelay.За подробностями обратитесь к документации calc [19]
Matreshka.ArrayskipMediator переименован в skipItemMediator.pull поддерживает только объекты и числа.from и of теперь наследуются.addone содержит добавленный объект под свойством addedItem вместо added.removeone содержит удаленный объект под свойством removedItem вместо removed.itemRenderer не оборачивается в span, если содержит несколько узлов; вместо этого генерируется исключение.useBindingsParser удалено.includes.find.findIndex.fill.copyWithin.keys.values.entries.За подробностями обратитесь к документации Matreshka.Array [20], pull [21], from [22], of [23], itemRenderer [24], METHOD [25].
Matreshka.Objectset, которое срабатывает при изменении свойств (но не удалении), отвечающих за данные.jset переименован в setData (по просьбам сообщества, старое название по-прежнему будет присутствовать).replaceData для метода setData.isDataKey.values.entries.За подробностями обратитесь к документации Matreshka.Object [26], setData [27], isDataKey [28], values [29], entries [30]
Matreshka.Classsymbol поддерживаются и в качестве свойств прототипа и в качестве статичных свойств.За подробностями обратитесь к документации Matreshka.Class [31]
sandbox генерируют исключение для всех объектов.container генерируют исключение для экземпляров Matreshka.Array.import text from 'matreshka/binders/text')for вместо вызова Object.assign.for.Matreshka.randomString).Matreshka.$b.create).Спасибо за внимание!
Автор: Finom
Источник [43]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/198255
Ссылки в тексте:
[1] Репозиторий: https://github.com/matreshkajs/matreshka
[2] Сайт: https://ru.matreshka.io/
[3] ссылку на текст: https://ru.matreshka.io/#!introduction
[4] semantic-release: https://github.com/semantic-release/semantic-release
[5] gh-pages: https://github.com/matreshkajs/matreshka/tree/gh-pages
[6] репозиторий сайта: https://github.com/matreshkajs/matreshka.io
[7] PM2: https://github.com/Unitech/pm2
[8] документации на украинском: https://ua.matreshka.io
[9] этом репозитории: https://github.com/matreshkajs/examples-and-tutorials
[10] Patreon: https://www.patreon.com/finom
[11] я писал на форуме: https://ru.matreshka.io/forum/#!/general:matreshka-2-0nmq7g7a5be
[12] теперь живет тут: https://github.com/finom/uniquestring
[13] теперь живет тут: https://github.com/finom/matreshka-binders-file
[14] bindNode: https://ru.matreshka.io/#!Matreshka-bindNode
[15] unbindNode: https://ru.matreshka.io/#!Matreshka-unbindNode
[16] binders: https://ru.matreshka.io/#!Matreshka.binders
[17] parseBindings: https://ru.matreshka.io/#!Matreshka-parseBindings
[18] bindSandbox: https://ru.matreshka.io/#!Matreshka-bindSandbox
[19] calc: https://ru.matreshka.io/#!Matreshka-calc
[20] Matreshka.Array: https://ru.matreshka.io/#!Matreshka.Array
[21] pull: https://ru.matreshka.io/#!Matreshka.Array-pull
[22] from: https://ru.matreshka.io/#!Matreshka.Array.from
[23] of: https://ru.matreshka.io/#!Matreshka.Array.of
[24] itemRenderer: https://ru.matreshka.io/#!Matreshka.Array-itemRenderer
[25] METHOD: https://ru.matreshka.io/#!Matreshka.Array-METHOD
[26] Matreshka.Object: https://ru.matreshka.io/#!Matreshka.Object
[27] setData: https://ru.matreshka.io/#!Matreshka.Object-setData
[28] isDataKey: https://ru.matreshka.io/#!Matreshka.Object-isDataKey
[29] values: https://ru.matreshka.io/#!Matreshka.Object-values
[30] entries: https://ru.matreshka.io/#!Matreshka.Object-entries
[31] Matreshka.Class: https://ru.matreshka.io/#!Matreshka.Class
[32] chain: https://ru.matreshka.io/#!Matreshka.chain
[33] deploy-to-git: https://github.com/finom/deploy-to-git
[34] github-embed: https://github.com/finom/github-embed
[35] webpack-generate-umd-externals: https://github.com/finom/webpack-generate-umd-externals
[36] cz-simple-conventional-changelog: https://github.com/finom/cz-simple-conventional-changelog
[37] cz-conventional-changelog: https://github.com/commitizen/cz-conventional-changelog
[38] eslint-plugin-output-todo-comments: https://github.com/finom/eslint-plugin-output-todo-comments
[39] babel-plugin-transform-object-spread-inline: https://github.com/finom/babel-plugin-transform-object-spread-inline
[40] babel-plugin-nofn: https://github.com/finom/babel-plugin-nofn
[41] babel-plugin-transform-es2015-modules-simple-commonjs: https://github.com/finom/babel-plugin-transform-es2015-modules-simple-commonjs
[42] makeelement: https://github.com/finom/makeelement
[43] Источник: https://habrahabr.ru/post/312274/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.