The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Facebook представил Yarn, новый пакетный менеджер для JavaScript

11.10.2016 20:53

Компания Facebook представила новый пакетный менеджер Yarn, ориентированный на управления зависимостями в проектах на языке JavaScript. Yarn разработан совместно с инженерами из компаний Exponent, Google и Tilde, и вобрал в себя опыт и лучшие идеи менеджеров зависимостей Bundler, Cargo и npm. Исходные тексты распространяются под лицензией BSD. Сборки подготовлены для macOS, Windows и Linux.

Yarn позиционируется как замена npm, способная работать с репозиториями npm, но обеспечивающая более высокий уровень производительности, надёжности и безопасности. Основными причинами создания нового пакетного менеджера стала невозможность избавления npm от ряда проблем без его кардинальной переработки. В частности, npm не обеспечивает постоянство установленных зависимостей для разных пользователей и систем. В зависимости от порядка установки пакетов, структура директории node_modules существенно отличается у разных пользователей, что приводит в возникновению ситуаций, в которых у одного пользователя всё может отлично работать, а у другого может проявляться ошибка. Кроме того, npm работает очень медленно и имеет архитектурные проблемы с безопасностью, связанные с автоматическим выполнением кода из пакетов.

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

Основные возможности:

  • Режим работы в offline: если пакет устанавливался ранее, то его повторная установка может быть осуществлена без наличия сетевого соединения;
  • Идентичность зависимостей: на любых системах, независимо от порядка установки, будет установлен точно такой же набор зависимостей;
  • Оптимизация сетевого взаимодействия: применяются эффективные алгоритмы группировки пакетов в очередь и обеспечения максимальной пропускной способности при загрузке данных;
  • Стойкость к проблемам в сети: сбой выполнения одного запроса не приводит к прерыванию установки, в случае проблем запрос будет повторён;
  • Возможность комбинирования реестров: можно устанавливать любые пакеты из репозиториев npm и Bower;
  • Плоский режим: для избежания появления дубликатов в Yarn предусмотрен анализ заменяемости версий зависимостей - при несовпадении версии, определяется возможность использования уже установленной версии;
  • Возможность создания фильтров лицензий, допускающих для установки только модули с заданными лицензиями;
  • Наличие стабильного JavaScript API и абстрактной модели журналирования для упрощения интеграции с различными сборочными инструментариями;
  • Минималистичный интерфейс командной строки.


  1. Главная ссылка к новости (https://code.facebook.com/post...)
  2. OpenNews: Применение тайпсквоттинга для распространения вредоносных модулей NPM, PyPI и Gems
  3. OpenNews: Незащищённость NPM к атакам по внедрению вредоносных модулей-червей
  4. OpenNews: Инцидент с захватом прав на NPM-модуль привёл к сбою в работе проектов, использующих NPM
  5. OpenNews: Доступен Composer 1.0.0, менеджер зависимостей для PHP
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/45305-yarn
Ключевые слова: yarn, pkg, javascript
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (72) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, th3m3 (ok), 21:01, 11/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –15 +/
    Есть же npm. Наплодят сейчас ещё менеджеров пакетов, как фрамеворков.
     
     
  • 2.3, ттт (?), 21:11, 11/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    пакетные менеджеры для линукса/юникса/позикса/gnu/solaris/[подставь сюда свою идею] как-то ведь существуют.
     
  • 2.8, KonstantinB (ok), 21:45, 11/10/2016 [^] [^^] [^^^] [ответить]  
  • +9 +/
    npm ужасен, в нем допущены все архитектурные ошибки, какие можно было
     
     
  • 3.14, Аноним (-), 23:43, 11/10/2016 [^] [^^] [^^^] [ответить]  
  • +32 +/
    Это же яваскрипт. Там все такое, начиная от языка.
     
     
  • 4.38, Кодер (?), 11:10, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Неумение пользоваться языком ещё не говорит об его архитектурных изъянах.
     
     
  • 5.43, Balancer (ok), 12:18, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +13 +/
    А умение пользоваться языком не говорит о его архитектурных достоинствах.

    JavaScript вполне объективно ужасен. Нужно или плохо знать альтернативы или быть совсем упёртым фанатом, чтобы не признавать это :) И, естественно, ужасная архитектура языка никак не коррелирует с его популярностью.

     
     
  • 6.45, Аноним (45), 12:58, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну что вы так... ES6 вполне годнота.
     
  • 6.52, Кодер (?), 14:39, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я и нечего и не говорил про архитектурные достоинства. Я сказал, что можно обходить эти изъяны по возможности за счёт уверенного владения языком.
     
     
  • 7.56, Crazy Alex (ok), 15:04, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Можно, но это всё же с горя. Плюс это создаёт некий фильтр восприятия - что допустимо, а что - нет.
     
     
  • 8.61, Balancer (ok), 17:27, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вообще, есть такая бяка Если язык позволяет писать плохо, то каким самоконтроле... текст свёрнут, показать
     
     
  • 9.63, freehck (ok), 19:06, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я сомневаюсь, что мощность языка и возможность писать плохо коррелируют между со... текст свёрнут, показать
     
  • 7.60, Balancer (ok), 17:25, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > можно обходить эти изъяны по возможности за счёт уверенного владения языком.

    Так это относится к любому языку. Хоть к Brainfuck'у :) Поэтому не может служить критерием оценки языка.

     
  • 7.66, Led (ok), 21:23, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > можно обходить эти изъяны по возможности за счёт уверенного владения языком.

    Демагоги-гуманитарии так и пытаются делать.

     
  • 6.64, Отражение луны (ok), 19:26, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Я думаю, с вашим скудным IQ вам не стоит рассуждать на такие темы.
     
  • 6.70, Кодер (?), 23:07, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А какой, по-вашему, язык объективно не ужасен?
     
  • 5.65, Led (ok), 21:21, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Неумение пользоваться языком ещё не говорит об его архитектурных изъянах.

    А умение пользоваться только языком говорит о професиональных изьянах пользователя.

     
  • 3.35, Sabakwaka (ok), 10:20, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> допущены все архитектурные ошибки...

    И при этом на скольких миллиардах браузеров всё работает без проблем?
    На четырёх?

     
     
  • 4.40, Аноним (-), 11:38, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А как связаны браузеры и npm?
     
  • 2.10, Zenitur (ok), 21:54, 11/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    yum умер - да здравствует yam!
     
     
  • 3.21, Аноним (-), 02:46, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    dnf
     
     
  • 4.26, Илья (??), 06:32, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    npm и yum вообще никак не связаны
     
     
  • 5.41, Вы забыли заполнить поле Name (?), 12:07, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Только тем, что теперь можно случайно перепутать sudo yum install c sudo yarn install
     
  • 3.32, 1 (??), 09:37, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +8 +/
    У вас ШГ, m != rn
     
     
  • 4.57, Аноним (-), 15:23, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Поставить что ли моноширный шрифт для опеннета?
     
     
  • 5.79, анан (?), 09:23, 16/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > моноширный

    Ты и так в одного ширяешься, судя по всему

     
  • 4.73, Ilya Indigo (ok), 08:56, 13/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > У вас ШГ, m != rn

    У меня в зелёнке после обновления freetype до 2.7 уже тоже. :-(
    https://itmages.ru/image/view/5019094/1ada2a0c
    вместо
    https://itmages.ru/image/view/4566777/61a011c0
    Они, таки, своё мыло, которое впихнули в 2.6.4, впихнули в 2.7.

     

  • 1.2, Аноним (-), 21:11, 11/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +14 +/
    Делали очередной фреймворк, получился пакетный менеджер.
     
  • 1.7, KonstantinB (ok), 21:44, 11/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    https://github.com/yarnpkg/yarn/blob/master/src/package-constraint-resolver.js

    Фи. SAT solver не осилили. Незачет.

     
  • 1.11, Аноним (-), 22:28, 11/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Джавно пора.
     
  • 1.12, Аноним (-), 22:56, 11/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Чем оно лучше nmp3 + shrinkwrap? Тем что не может собирать нативные C++ либы на сервере?
     
     
  • 2.16, Аноним (-), 00:14, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +6 +/
    А не могли бы вы поделиться зачем вам собирать c++ либы на сервере при помощи жаваскриптового пакетного менеджера?
     
     
  • 3.33, Аноним (-), 09:48, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Биндинги же
     
  • 3.36, Sabakwaka (ok), 10:22, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А не могли бы вы поделиться зачем вам собирать c++ либы на
    > сервере при помощи жаваскриптового пакетного менеджера?

    Внедрять себе руткиты.


     

  • 1.15, Джобс (?), 00:01, 12/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сейчас главная фишка это поддержка lock-файла, как в Bundler. Без этого раньше трудно было работать в большой команде и апдейтить зависимости.

    Главный минус — легаси package.json. Понятно зачем, но все же хотелось большей свободы по примеру того же Bunlder'а :(

     
  • 1.19, all_glory_to_the_hypnotoad (ok), 01:37, 12/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > ... пакетный менеджер Yarn

    Прямо таки фантазия у людей прёт изо всех щелей.

     
  • 1.22, Аноним (-), 03:24, 12/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Как же хорошо, что я больше не занимаюсь кодингом под веб. Хренова куча различной готовности библиотек, менеджеров и прочей ерунды. Постоянно что-то работает через *опу, постоянная гонка за "прозрачной морковкой" в виде 0,0(1)% в скорости от переписи библиотеки с использованием новой технологии "поделка на колене".
     
     
  • 2.30, Харли (?), 09:28, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да вообще фейсмейкерство = труъ адъ. Пока все манагерские свистелки-перделки прикрутишь, с ума сойти можно. А потом начинается: одному слишком красненько, другому оно же сильно фиолетово и плевать что он дальтоник, зато он главнюк иоппа-понеслась, открываем чемпионат по размеру причандалов, бюджетов и количества подчиненных... Свят-свят-свят
     

  • 1.23, Аноним (-), 03:27, 12/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    очень хорошо. npm делают люди, не вызывающие никакого доверия и уважения - см. kik, nodevember. Теперь надо сделать следующий шаг и избавиться от их репозиториев. (inb4 очередная идиотская шутка про "избавиться от js")
     
     
  • 2.24, Аноним (-), 05:05, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Да вообще все, что сделано людьми, не вызывает никакого доверия. Ты поймешь это, когда в разгар популярности "убийцы npm" ты напишешь точно такой же комментарий, но направленный против другого пакетного менеджера.
     
  • 2.67, Led (ok), 21:27, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Ты так говоришь, как будто кто-то из джавастриптизёров может вызывать уважение.
     

  • 1.25, jOKer (ok), 06:02, 12/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В принципе, все верно говорят, - у npm и впрямь трудности, в том числе и архитектурные. Единственно: как бы лекарство не оказалось хуже болезни; может стоило лучше новую ветку npm выпустить?

    Как известно, у команды Facebook наряду с очень даже верными идеями есть и весьма спорные реализации, вроде шаблонов в коде (react). Тут не получится так же?

    Но конечно, посмотреть новый менеджер будет весьма любопытно.

     
     
  • 2.27, Аноним (-), 06:56, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    давно заметил: если человек выражает недовольство шаблонами в коде react, значит он никогда ничего не писал на react
     
     
  • 3.28, jOKer (ok), 07:27, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если вы имеете ввиду мое выражение

    >> есть и весьма спорные реализации

    то, вообще говоря, это не недовольство, а просто попытка быть объективным: насколько мне известно, данная методика имеет как завзятых сторонников, так и яростных противников. И с этой точки зрения решение Facebook завязаться на нее безусловно можно назвать "спорным". Что я и делаю.

     
     
  • 4.29, Аноним (-), 07:47, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Любое решение - спорное. Вообще любое.
     
  • 4.34, мимопроходил (?), 10:09, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > решение Facebook завязаться на нее безусловно можно назвать "спорным"

    Если вы о JSX, то никто не заставляет его использовать - всегда можно обойтись "pure JS" кодом, вроде createElement. Собственно, JSX потом в него и транслируется. Поэтому говорить, что Facebook "завязал" React на JSX.

    > React JSX transforms from an XML-like syntax into native JavaScript. XML elements, attributes and children are transformed into arguments that are passed to React.createElement.

    Source: https://facebook.github.io/react/docs/jsx-in-depth.html#the-transform

     
     
  • 5.39, jOKer (ok), 11:25, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это только теория. А на практике - главная "вкусняшка" реакта - JSX. Убери ее и что останется от него? Не так уж и много, между прочим. И в этом "немногом" ровно ничего революционного. Разработчики выбирают реакт в первую, во вторую и в последнюю тоже очередь из-за JSX. Это чистая правда.

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

     
     
  • 6.42, Вы забыли заполнить поле Name (?), 12:12, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Это только теория. А на практике - главная "вкусняшка" реакта - JSX.
    > Убери ее и что останется от него? Не так уж и
    > много, между прочим.

    Шта? Виртульный DOM, который сам определеяет diff изменений - вот главная идея реакта, а не синтаксис как описать это виртуальное дерево.


     
     
  • 7.48, jOKer (ok), 13:32, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Считаете идею буферного редринга достойной упоминания? Нууу... в принципе, вы конечно в чем-то правы - в js это ноухау. Однако назвать это "революцией" я бы все же постеснялся.
     
  • 7.54, Кодер (?), 14:57, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    По-моему, vdom появился раньше реакта, поэтому diff - это только особенность реализации. Мне кажется главная идея реакта - это компоненность.

    Информация с главной страницы:
    "Component-Based. Build encapsulated components that manage their own state, then compose them to make complex UIs."

     
  • 6.76, Тетя Сара (?), 01:27, 14/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Та кто вам такое сказал? Лева не смешивайте вы эту водку с пивом, пейте отдельно!
     

  • 1.31, Аноним (-), 09:37, 12/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Устанавливает сам себя в 4 раза быстрее чем npm, при этом сохраняет в .lock-файл разрешенные зависимости и повторно ставит себя еще в 4 раза быстрее.
     
  • 1.37, fail (?), 10:59, 12/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > Компания ...

    так, очень гут, можно отркывать тотализатор:
    - лиca, хpoмой и т.д. - ктo первый интeгрирyeт идею ?
    - время превращения из пакетнoгo в мaгaзинный - полгода, год, .. ?
    - будyт ли coвместимыми менеджepы из лисы и хpoмого(в принципе вопрос риторический) ?

     
  • 1.44, Аноним (-), 12:29, 12/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Б- безопасность

    he easiest way to install Yarn on macOS and generic Unix environments is via our shell script. You can install Yarn by running the following code in your terminal:

    curl -o- -L https://yarnpkg.com/install.sh | bash

     
     
  • 2.46, й (?), 13:26, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    что самое смешное, npm install -f yarn работает, но почему-то задвинут на третью страницу способов установки
     
     
  • 3.47, й (?), 13:27, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    тьфу, -g, конечно же
     
     
  • 4.49, Crazy Alex (ok), 13:45, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    И что здесь странного?
     
     
  • 5.53, й (?), 14:46, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    эм, смотри. у них инструкция для установки:

    1. установите ноду
    2. curl .../install.sh | sudo bash (и оно выкачивает tgz, ставит в /opt и модифицирует .bashrc)

    разве не логичнее будет:

    1. установите ноду (npm идёт в комплекте)
    2. npm install -g yarn ?

     
     
  • 6.55, Crazy Alex (ok), 15:02, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Учитывая, что они считают npm плохим/небезопасным? Разумеется, не логичнее.
     
     
  • 7.58, й (?), 16:13, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    учитывая, что у них '-g' deprecated (и по делу), способа поставить grunt/gulp/bower без npm нет. логично же ставить yarn как и все эти остальные.
     
  • 2.51, ivan1986 (?), 14:32, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    generic Unix environments это все что угодно включая LFS
    А что вы хотели? на маке до сих пор нормального пакетного менеджера нет.
    деб и рпм репы есть, даже в аур закинули.
     
     
  • 3.59, й (?), 16:38, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > на маке до сих пор нормального пакетного менеджера нет.

    homebrew же. кстати, там уже yarn в pull requests.

     
     
  • 4.62, Вы забыли заполнить поле Name (?), 17:50, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > homebrew же

    Он умеет подпись пакетов?

     
     
  • 5.68, й (?), 22:04, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    в арче до недавнего времени полное отсутствие подписей почти никого не смущало, кстати.

    в brew есть sha256-суммы для бинариков и сурсов, прямо в каждой формуле.

     
     
  • 6.69, Led (ok), 22:54, 12/10/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > в арче до недавнего времени полное отсутствие подписей почти никого не смущало,
    > кстати.

    современная школота не знает, что такое смущение, кстати.

     
  • 6.71, Вы забыли заполнить поле Name (?), 01:32, 13/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    В pacman подпись добавлена в версии 4.0.0 вышедшей 2011-10-13.
    У homebrew ее нет.
     
  • 4.75, ivan1986 (?), 16:44, 13/10/2016 [^] [^^] [^^^] [ответить]  
  • +/
    *нормального*
     

  • 1.50, Kroz (ok), 14:13, 12/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Жду пакетного менеджера для .txt файлов
     
  • 1.72, Аноним (-), 04:52, 13/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почувствуйте разницу:
    [desktop] ~/projects/hosp/frontend $ time npm install
    ...
    real 0m28.309s
    user 0m11.650s
    sys 0m0.947s

    [desktop] ~/projects/hosp/frontend $ time yarn install
    ...
    real    0m7.218s
    user    0m4.247s
    sys 0m0.447s

    Выбор очевиден.

     
  • 1.74, deadfood (ok), 16:29, 13/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    leftpad уже отрелизили?
     
  • 1.77, Аноним (-), 11:15, 15/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Что я вижу? Упоминание "Facebook", словосочетание "Facebook представил" в заголовке новости, упоминание "JavaScript" и словосочетание
    "новое _что-то_ для JavaScript". Каждая эта вещь, взятая отдельно – уже повод для минуса, а тут аж целое комбо.
     
     
  • 2.78, Аноним (-), 11:40, 15/10/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Каждый вымер, подобный твоему - не достоин существования в принципе, но не на опеннете - тут тако еще одобряется, да еще и поощряется "объективными" модераторами
     

  • 1.80, Аноним (-), 14:57, 16/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Когда нам WebAssembly представят? А то хочется на Python под Front-End писать.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру