Спустя 11 месяцев после открытия кода Facebook представил (https://code.facebook.com/posts/274518539716230) первый стабильный релиз пакетного менеджера Yarn 1.0 (https://yarnpkg.com/), предназначенного для управления зависимостями в проектах на языке JavaScript и вобравшего в себя опыт и лучшие идеи менеджеров зависимостей Bundler (https://github.com/bundler/bundler), Cargo (https://github.com/rust-lang/cargo) и npm (https://github.com/npm/npm). Исходные тексты распространяются (https://github.com/yarnpkg/yarn) под лицензией BSD. Сборки подготовлены (https://yarnpkg.com/en/docs/install) для macOS, Windows и Linux.Yarn позиционируется как замена npm, способная работать с репозиториями npm, но обеспечивающая более высокий уровень производительности, надёжности и безопасности. Основными причинами создания нового пакетного менеджера стала невозможность избавления npm от ряда проблем без его кардинальной переработки. В частности, npm не обеспечивает постоянство установленных зависимостей для разных пользователей и систем. В зависимости от порядка установки пакетов, структура директории node_modules существенно отличается у разных пользователей, что приводит в возникновению ситуаций, в которых у одного пользователя всё может отлично работать, а у другого может проявляться ошибка. Кроме того, npm работает очень медленно и имеет архитектурные проблемы (https://www.opennet.ru/opennews/art.shtml?num=44111) с безопасностью, связанные с автоматическим выполнением кода из пакетов.
Для достижения высокой производительности в Yarn применена техника кэширования всех загруженных пакетов, что позволяет исключить ситуации, в которых может потребоваться повторная загрузка. Для ускорения также применяется распараллеливание операций, что позволяет существенно сократить время установки пакетов. Надёжность обеспечивается благодаря применению файлов-блокировок для привязки зависимостей к определённой версии и детерминированному алгоритму установки, гарантирующему, что установленный пакет будет работать идентично на любых системах. Для поддержания безопасности в Yarn осуществляется проверка целостности каждого установленного пакета по контрольным суммам.
Основные возможности Yarn:- Режим работы в offline: если пакет устанавливался ранее, то его повторная установка может быть осуществлена без наличия сетевого соединения;
- Идентичность зависимостей: на любых системах, независимо от порядка установки, будет установлен точно такой же набор зависимостей;
- Оптимизация сетевого взаимодействия: применяются эффективные алгоритмы группировки пакетов в очередь и обеспечения максимальной пропускной способности при загрузке данных;
- Стойкость к проблемам в сети: сбой выполнения одного запроса не приводит к прерыванию установки, в случае проблем запрос будет повторён;
- Возможность комбинирования реестров: можно устанавливать любые пакеты из репозиториев npm и Bower;
- Плоский режим: для избежания появления дубликатов в Yarn предусмотрен анализ заменяемости версий зависимостей - при несовпадении версии, определяется возможность использования уже установленной версии;- Возможность создания фильтров лицензий, допускающих для установки только модули с заданными лицензиями;
- Наличие стабильного JavaScript API и абстрактной модели журналирования для упрощения интеграции с различными сборочными инструментариями;
- Минималистичный интерфейс командной строки.
Новшества (https://github.com/yarnpkg/yarn/releases/tag/v1.0.0), представленные в выпуске Yarn 1.0:- Включены по умолчанию рабочие области (Workspaces (https://yarnpkg.com/blog/2017/08/02/introducing-workspaces/)), позволяющие автоматически агрегировать все зависимости из нескольких файлов package.json и дающие возможность установить всех их за один шаг или использовать для всех один файл-блокировку (yarn.lock);
- Добавлен механизм автоматического слияния изменений (auto-merge), позволяющий автоматически разрешать конфликты с yarn.lock, возникающие, когда в системе управления версиями несколько разработчиков добавляют в yarn.lock данные о разных зависимостях. Подобные конфликты теперь по возможности разрешаются в процессе выполнения команды "yarn install" и в результате создаётся новый yarn.lock, избавленный от конфликтов;
- Появились средства для выборочного определения версий, которые позволяют решить проблему с обновлением непрямых зависимостей. Например, в пакете может быть устранена важная ошибка или критическая уязвимость, но в текущем проекте этот пакет может использоваться не напрямую, а как зависимость у какого-то другого пакета. Раньше, пока не обновится этот другой пакет, не обновлялись и его зависимости. Теперь в package.json можно задать требуемые версии и для субзависимостей;- Улучшен процесс интерактивного обновления;
- Ускорена проверка целостности файлов;
- Добавлен отдельный модуль для парсинга файлов блокировки.
URL: https://code.facebook.com/posts/274518539716230
Новость: https://www.opennet.ru/opennews/art.shtml?num=47152
Уже 1.0.1 версия, джаваскрипт программисты они такие
Единственное опенсорс ПО от фейсбук. Что реакт, что флоу, что ризон ограничены патентами, а ярн нет благодаря стараниям этого парня.
https://pbs.twimg.com/profile_images/762858401390927875/uW_1...
Джжастину Бирберу спасибо!
Действительно, получше npm'а будет.
Это нетрудно.
npm 5.0 по сути все тоже самое делает. Facebook опоздал.
npm все еще то гогно.
Что значит опоздал?
Npm5 это исключительно их ответ на появление yarn.
В принципе npm5 уже более юзабелен, но yarn выкатил еще пару крутых фич - workspaces и resolutions.
Кроме того, не могу вспомнить, решил ли npm5 вопросы offline-инсталла?
а если в процессе загрузки пакет побился/не загрузился полностью. т.е. нерабочий, некоторые подобные менеджеры метят таковой как скачанный и из-за этой оффлайновой загрузки не скачивают ещё раз - приходится лезть к кэш пакетчика и руками удалять пакет. не знаешь, как эту проблему обошли в этом менеджере?
Для поддержания безопасности в Yarn осуществляется проверка целостности каждого установленного пакета по контрольным суммам.Я думаю ответ сдесь
Здесь*. Пиши правильно =)
В portage таких проблем нет. Используй его.
>решил ли npm5 вопросы offline-инсталла?Пока не идеально, но прогресс существенный:
И вновь толпы фронтендеров наперегонки рванулись за очередной прогрессивной новинкой, не успевая удерживать спадающие джинсы, захлёбываясь от собственных восторженных криков, расталкивая друг друга руками в попытках выйти в лидеры гонки!Воистину прогресс в наши дни не просто не стоит на месте, а облетает планету стремительной ракетой! Воистину инновации сыплются как из рога изобилия! Мы живём в прекрасное время, троекратное ура нам всем!
скулеж ретрограда, не закоммитившего за свою жизнь ни строки в опенсорс
> скулежЭто смех. Скулёж у тебя начался, это твоё "чего вы смеётесь", "на себя посмотрите", зажатый между ног хвост и т.п.
> ретрограда
Спасибо :)
> не закоммитившего за свою жизнь ни строки в опенсорс
Пруфы будут? Или мы тебе на слово должны верить?
А вот и не фронтендеров, а как раз таки больше бекендеров
А есть разница между этими категориями макак?// Системный программист
Они как минимум не разыменовывают NULL
> Они как минимум не разыменовывают NULLПравда? А кто же тогда, всю жизнь проработав на скриптоте в песочнице браузера и не умея работать с указателями, лезет писать на Си, разыменовывает NULL, а потом жалуется, что ну его нафик этот Си, на нём писать невозможно, запилю-ка я свой калькулятор лучше на электроне?
я верю - у тебя всё получится! не у всех с первого раза всё получается, главное - не останавливаться и не опускать руки. попробуй вот книжку почитать https://learncodethehardway.org/c/
Действительно, они не знают смысла обоих слов во фразе «разыменовать NULL» :-)
Вспомнил джавистов с их NPE...
у них хоть NPE, а у сишников - порча данных и дыра
>// Системный программистОх ну ничего себе, перстень поцеловать позволите?
JS — эта лингва франка текущего поколения, как Java 10 лет назад и C++ — 20. Если кто-то утверждает, что он программист, и при этом неспособен к написанию поддерживаемого эффективного кода на ЛЮБОМ мейнстримном языке — грош цена такому «программисту».Боль так называемых «системных программистов» мне понятна: это консерваторы до мозга костей, навек погрязшие в реальном режиме, 8-разрядных регистрах и единственного метода адресации. Мир требует разных задач, а не только драйверов доя управления сервоприводом и простейших прошивок для микроконтроллеров. Поэтому чем более абстрагирован инструмент от низкого уровня (читай опкодов/асма/си), тем больше он подходит для написания больших систем. Программисты настоящего не страдают микрооптимизациями, экономией на спичках и прочими сомнительными «радостями» системных программистов. И это прекрасно, потому что от фон-неймановской архитектуры рано или поздно уйдут, и тут больше пригодятся навыки решения практических задач, а не суходрочка на голом железе. Что характерно, большая часть называющих себя «системными программистами» неспособны написать даже простейшее ядро ОС.
> JS — эта лингва франка текущего поколения, как Java 10 лет назад и C++ — 20.Лингва франка сейчас, как и 10, и 20, и 40 лет назад — C.
> Если кто-то утверждает, что он программист, и при этом неспособен к написанию поддерживаемого эффективного кода на ЛЮБОМ мейнстримном языке — грош цена такому «программисту».
Не надо путать "неспособен" и "западло".
> от фон-неймановской архитектуры рано или поздно уйдут, и тут больше пригодятся навыки решения практических задач, а не суходрочка на голом железе.
Такие, как ты, брезгующие "суходрочкой на голом железе", сами по себе никуда не уйдут. Привыкли тут, понимаешь, на всём готовеньком… Крылова хоть почитай, а то чисто свинья под дубом.
>Такие, как ты, брезгующие "суходрочкой на голом железе", сами по себе никуда не уйдут.Как предсказуемо, в ответ на доводы великий «системный программист» стал прилюдно раздувать эго. Вынужден тебя огорчить: всю системщину давно подмяли под себя китайцы, просто потому, что у них есть доступ к элементарной базе под боком. И у тебя из конкурнетных преимуществ перед ними только более низкая стоимость труда. А остальные преимущества у них.
>Не надо путать "неспособен" и "западло".
Ну конечно, "западло" выходить из зоны комфорта, особенно когда понимаешь, что программированию на языках высокого уровня нужно учиться (и не меньше, чем архитектуре ЦПУ и ОС, а много больше). А учиться не хочется, потому что мозг застрял в регистрах и микроконтроллерах. Спроси себя, «системный» «программист», как давно ты сделал что-то законченное и полезное само по себе (а не только в совокупности с высокоуровневым кодом)?
Ваше «западло» — пустые пoнты 20-летних недоучек, думающих, что раз они выучили си, мир теперь принадлежит им и больше ничему учиться не надо. Огорчу тебя, си остался в 70-х годах прошлого века. Знать его конечно надо, как и ассемблер, и лисп, и форт. Но недостаточно, если ты занят разработкой софта, а не железа.
Так что свинья под дубом — это как раз ты и есть, низкоуровневый лентяй.
Спроси себя, «высокоуровный» «программист», как давно ты сделал что-то законченное и полезное само по себе (а не только в совокупности с низкоуровневым кодом)?
То есть, по вашему, каждый, кто разрабатывает приложение, работающее не напрямую с железом, а, о ужас, работающее только в совокупности с другим кодом (например, кодом ядра), неполноценен? :-)
По-моему, неполноценен тот, кто не может создать что-то стоящее.И постоянные смены фреймворков/пакетных менеджеров на другие, потом на третьи, - это не прогресс а оправдание неспособности создать что-то рабочее. Просто, как слепые, тыкаются в разные стены в надежде наткнуться на дверь.
А, ну есть такие персонажи, которые бегут переделывать все на новый модный фреймворк не понимая зачем им это. Только причем тут высокоуровневость-низкоуровневость?
> Только причем тут высокоуровневость-низкоуровневость?На высокоуровневом языке может писать любая обезьяна, в результате средний по больнице уровень инженерного мышления существенно ниже, чем у тех, кто пишет под железо. Отсюда и большее количество полурабочего софта/фреймворков на высокоуровневых языках, которые к тому же постоянно меняются и за которыми надо постоянно бежать, чтобы не стать ретроградом в глазах "специалистов". И как раз об этом новость.
Я же отвечал человеку, который, кажется, считает, что на высокоуровневом языке (без использования низкоуровневых возможностей) можно написать больше, чем на низкоуровневом (без использования высокоуровневых возможностей).
Если бы не NDA, я бы показал код, написанный на сях одним "специалистом по хайлоаду", это шедевр, веб-разработчики на jquery отдыхают :-)А что до среднего уровня - чем более распространена технология, тем больше идиотов будет, ясен пень.
> великий «системный программист»Это тёзка. И протри монитор, а то весь слюной забрызгал.
> JS — эта лингва франка текущего поколенияВы это серьёзно, или я тэг "сарказм" не заметил?
> Если кто-то утверждает, что он программист, и при этом неспособен к написанию поддерживаемого эффективного кода на ЛЮБОМ мейнстримном языке — грош цена такому «программисту».Я программист и могу писать и поддерживать код на ЛЮБОМ мейнстримном языке.
Но ПОЛЬЗОВАТЬСЯ я хочу лишь софтом на нормальных языках, в список коих яваскрипт не входит.
> Но ПОЛЬЗОВАТЬСЯ я хочу лишь софтом на нормальных языках, в список коих
> яваскрипт не входит.Хочу тебя огорчить, ты уже пользуешься софтом на джаве, дотнете и JS, безотносительно того, хочешь ты этого или нет. И независимо от того, что там у тебя установлено на твоём комплюктере. Можно конечно забаррикадироваться на своём локалхосте и не пользоваться интернетом, но что-то мне подсказывает, что ты так не хочешь. Современный веб неотделим от Java и JS.
Убийство мирных людей — эта лингва франка текущего поколения, как принижение черных 70 лет назад и рабы — 150 лет назад . Если кто-то утверждает, что он человек, и при этом неспособен к унизительной поддерживаемой философии на ЛЮБОМ клочке этой земли — грош цена такому «человеку».
> А вот и не фронтендеров, а как раз таки больше бекендеровБэкендеры на яваскрипте не пишут. Это фронтендеры, которых наняли на бэкенд а обучать не стали, так как слишком дорого.
А на чем они пишут? На php?
> А на чем они пишут? На php?Если надо, то и на php могут, в отличие от. А так выбор широк - это ж не под полтора браузера писать, которые кроме яваскрипта ничего не могут - от C/C++ до Java.
>> А на чем они пишут?
> от C/C++ до Java.Я бы даже сказал страшнее: от Racket до OCaml. :)
А что же с теми кто пилят проекты на NodeJS теперь, но ранее работали c Java, C++, PHP, Python?
У вас мир какой-то мир однобокий.
> А что же с теми кто пилят проекты на NodeJS теперь, но ранее работали c Java, C++, PHP, Python?А теперь они раз в полгода меняют фреймворк и раз в два года пакетный менеджер?
Я вообще тормоз по жизни, но как только выкатили yarn и я увидел в тексте что-то про yarn.lock, я реально всё бросил и пошел ставить xD
При этом про npm-shrinkwrap, который был до yarn'а, вы не слышали, да?
Разумеется я слышал и даже попробовал.
А потом узнал, что этот shrinkwrap внезапно даже гитовские репы не умеет фиксировать.
Собственно npm5-овский package-lock вполне объясняет, каким убожеством был их shrinkwrap
Ох, если бы только фронтэндеров. Те, кто знают исключительно яву, везде пытаются её применить, прям беда.
Пакет для убунту из https://yarnpkg.com/ не совместим с пакетом npm в Debian Jessie.
пакет Yarn - требует установку Nodejs версии 4.7.2~dfsg-2 (jessie-backports)
но при этом удаляется npm, который требует Nodejs обязательно версии 0.10.29~dfsg-2 (oldstable)
В итоге, или пересобирать пакет для Debian или выбирать, какой пакетный менеджер JS использовать
Не надо ставить node.js (как и многие другие рантаймы) из пакетов, тем более из репозиториев LTS-дистрибутивов, там гарантировано заведомо окаменелая некроверсия времён династии Цин...
> Не надо ставить node.jsточка
И чем же фронтенд собирать прикажете?Писать ручками JS без статической типизации, а весь CSS без препроцессоров, заменяя труд машины трудом человека?
Из пакетов ставить надо. Только, конечно, не из репозиториев дистрибутивов, а из NodeSource и подобных: https://nodejs.org/en/download/package-manager/
Да, точно, это я и имел ввиду.
Непонятно, кстати, зачем такие вещи вообще включают в официальные дистрибутивы, кода всё-равно к моменту выхода (а то и задолго до) они протухнут и всё-равно придётся использовать внешние источники.
Задача LTS дистрибутива в первую очередь в том, чтобы обеспечить стабильную работу всех входящих в него пакетов во всех комбинациях. Потому там заведомо будет не самый свежий софт.
Согласен. Это лучшее решение. Но мне деплоить в продакшен не нужно. А раз все, что надо (за исключением сабжа), до того работало на версии династии Цин, то зачем делать лишние телодвижения
Поставьте себе nvm и не мучайтесь.
ClojureScript и экосистема Clojure лучше для веб-разработки. Язык хотя бы мозги включить обязывает. В JS этого нет. И единая форма написания операторов, функций и т.п. Потому что все есть функция.
> ClojureScript и экосистема Clojure лучше для веб-разработки. Язык хотя бы мозги включить
> обязывает. В JS этого нет. И единая форма написания операторов, функций
> и т.п. Потому что все есть функция.Вы абсолютно правы, любой язык лучше JavaScript-a, а Clojure так вообще офигенен, но рынку, к сожалению, пофиг.
> лучше для веб-разработки. Язык хотя бы мозги включить обязывает.
> для веб-разработки [...] мозги включить обязывает/0
В последних npm сделали генерацию package-lock.json, этакий shrinkwrap, но по умолчанию. При этом его можно публиковать без проблем (с публикацией shrinkwrap.json в разных версиях npm были разные приколы). Так что самую существенную проблему (со стабилизацией зависимостей) они решили, поздновато, конечно, но, как говорится, лучше поздно, чем никогда.