Сегодня во всех каналах прогремела новость — GitHub купил npm. В блоге GitHub появился пост Ната Фридмана о том, что это значит для сообщества — "npm is joining GitHub".
В ближайшем будущем усилия будут сфокусированы на инфраструктуре реестра. Также продолжается работа над седьмой версией npm — самая большая фича следующего релиза Workspaces (управление множеством пакетов из пакета верхнего уровня). Обещают активно сотрудничать с сообществом и ментейнерами пакетов — планируют расширить программу GitHub Sponsors на экосистему npm. Платные сервисы npm будут продолжать работать, но в этом году приватные пакеты npm можно будет переместить в GitHub Packages. Фокус в развитии npm смещается исключительно на публичный реестр.
Так как GitHub принадлежит Microsoft, это означает: что npm переходит под её крыло. Уж что-что, а инструменты для разработчиков Microsoft умеет делать хорошо.
#announcement #npm #github #microsoft
https://github.blog/2020-03-16-npm-is-joining-github/
В ближайшем будущем усилия будут сфокусированы на инфраструктуре реестра. Также продолжается работа над седьмой версией npm — самая большая фича следующего релиза Workspaces (управление множеством пакетов из пакета верхнего уровня). Обещают активно сотрудничать с сообществом и ментейнерами пакетов — планируют расширить программу GitHub Sponsors на экосистему npm. Платные сервисы npm будут продолжать работать, но в этом году приватные пакеты npm можно будет переместить в GitHub Packages. Фокус в развитии npm смещается исключительно на публичный реестр.
Так как GitHub принадлежит Microsoft, это означает: что npm переходит под её крыло. Уж что-что, а инструменты для разработчиков Microsoft умеет делать хорошо.
#announcement #npm #github #microsoft
https://github.blog/2020-03-16-npm-is-joining-github/
The GitHub Blog
npm is joining GitHub
We're excited to announce that npm will be joining GitHub.
25 апреля npm немного поштормило. Ошибка в пакете is-promise, привела к поломке трёх миллионов зависимых проектов. Форбс Линдсей — автор библиотеки — написал постмортем.
После добавления поддержки ESM новый файл index.mjs не был добавлен в секцию
С момента публикации сломанной библиотеки до её полного фикса прошло четыре часа. Для предотвращения проблем в будущем был удалён
#npm #postmortem #esm #nodejs
https://medium.com/@forbeslindesay/is-promise-post-mortem-cab807f18dcc
После добавления поддержки ESM новый файл index.mjs не был добавлен в секцию
files
в package.json. Также в секции exports
идентификатор модуля был без префикса ./
. Из-за опубликованного кода перестал работать require вида require('is-promise/index')
, require('is-promise/index.js')
, require('is-promise/package.json')
.С момента публикации сломанной библиотеки до её полного фикса прошло четыре часа. Для предотвращения проблем в будущем был удалён
.npmignore
и добавлен прогон тестов для Node.js 12 и 14, также были добавлены тесты, использующие npm pack для проверки публикуемого API и настроена публикация пакетов из CI. Разработчики Node.js в свою очередь обновили документацию, уточнив, что package.exports
должен явно включать в себя все необходимые точки входа.#npm #postmortem #esm #nodejs
https://medium.com/@forbeslindesay/is-promise-post-mortem-cab807f18dcc
Medium
is-promise post mortem
Last Saturday, I made the decision to try and catch up on some of the many contributions to my open source projects. One of the first pull…
В постмортеме инцидента с is-promise одна из проблем была в конфиге, в который не был добавлен новый файл. Это случилось из-за того, что автора библиотеки запутало наличие файла
В npm есть два механизма для исключения попадания ненужных файлов в пакет: файл
К советам из статьи стоит прислушаться. Как минимум, можно начать с подозрением относиться к
#npm
https://medium.com/@jdxcode/for-the-love-of-god-dont-use-npmignore-f93c08909d8d
.npmignore
. Когда писал пост про постмортем, нашёл статью Джефа Дики про вред .npmignore
— "For the love of god, don’t use .npmignore".В npm есть два механизма для исключения попадания ненужных файлов в пакет: файл
.npmignore
(blacklist) и секция files в package.json
(whitelist). По умолчанию npm игнорирует файлы, которые находятся в .gitignore
, но при добавлении в проект конфига .npmignore
.gitgnore
перестаёт учитываться. Из-за этого нюанса у автора статьи утекли данные для аутентификации в S3, поэтому он рекомендует использовать только белый список файлов в package.json
(явное лучше неявного). Но .npmignore
может быть полезен, когда надо исключить раскиданные по проекту юнит-тесты __test__
/ *.test.js
и т.п.К советам из статьи стоит прислушаться. Как минимум, можно начать с подозрением относиться к
.npmignore
.#npm
https://medium.com/@jdxcode/for-the-love-of-god-dont-use-npmignore-f93c08909d8d
Medium
For the love of god, don’t use .npmignore
.npmignore is a serious hazard in Node.js projects you should immediately quit using (except in one situation as outlined below). There is…
Айзек Шлутер опубликовал первую статью про изменения в следующей версии npm — "npm v7 Series - Introduction".
В первой статье Айзек делает обзор всех фич, которые будут доступны в седьмой версии. В ней будет улучшен процесс работы с пакетами. Будет добавлена поддержка воркспейсов и возможность переопределения пакетов. Будет упрощён вывод результата выполнения разных команд. Вывод npm audit в новой версии занимает гораздо меньше места, показывая только самую необходимую информацию. В кодовой базе был сделан большой рефакторинг, благодаря которому npm стал работать быстрее. Появится интеграция с yarn. Процесс установки пакетов будет учитывать yarn.lock. Yarn.lock также будет обновляться вместе с package-lock.json при добавлении в проект новых пакетов.
В следующих статьях про npm v7 будет более подробное описание работы всех новых фич.
#npm #announcement
https://blog.npmjs.org/post/617484925547986944/npm-v7-series-introduction
В первой статье Айзек делает обзор всех фич, которые будут доступны в седьмой версии. В ней будет улучшен процесс работы с пакетами. Будет добавлена поддержка воркспейсов и возможность переопределения пакетов. Будет упрощён вывод результата выполнения разных команд. Вывод npm audit в новой версии занимает гораздо меньше места, показывая только самую необходимую информацию. В кодовой базе был сделан большой рефакторинг, благодаря которому npm стал работать быстрее. Появится интеграция с yarn. Процесс установки пакетов будет учитывать yarn.lock. Yarn.lock также будет обновляться вместе с package-lock.json при добавлении в проект новых пакетов.
В следующих статьях про npm v7 будет более подробное описание работы всех новых фич.
#npm #announcement
https://blog.npmjs.org/post/617484925547986944/npm-v7-series-introduction
blog.npmjs.org
npm Blog Archive: npm v7 Series - Introduction
npm Blog (Archive); updates from the npm team are now published on the GitHub Blog and the GitHub Changelog
Гари Чу — devrel из Google — опубликовал статью про проблемы использования транспилированного кода в современных браузерах — "Bringing Modern JavaScript to Libraries".
На данный момент многие библиотеки из npm транспилируются в ES5. Это проблема, так как даже если проект не поддерживает legacy-браузеры, он должен "заплатить налог" в виде размера бандла. Этот налог для разных библиотек может быть как 7%, так и 40%.
В январе 2020 года в Node.js 13.7.0 появилась поддержка условных экспортов, с помощью которых можно указать разные сборки для разных типов окружений. Гари предлагает добавить новый тип окружения в условный экспорт для бандлов, которые транспилируются в ES2017 (один из возможных вариантов —
Очень полезное предложение. Думаю, что бандлеры адаптируют предлагаемый подход или как минимум придут к какому-нибудь другому альтернативному решению
#proposal #perfomance #npm
https://dev.to/garylchew/bringing-modern-javascript-to-libraries-432c
На данный момент многие библиотеки из npm транспилируются в ES5. Это проблема, так как даже если проект не поддерживает legacy-браузеры, он должен "заплатить налог" в виде размера бандла. Этот налог для разных библиотек может быть как 7%, так и 40%.
В январе 2020 года в Node.js 13.7.0 появилась поддержка условных экспортов, с помощью которых можно указать разные сборки для разных типов окружений. Гари предлагает добавить новый тип окружения в условный экспорт для бандлов, которые транспилируются в ES2017 (один из возможных вариантов —
browser2017
). Предполагается, что бандлеры могут использовать это окружение для создания облегчённой версии бандла приложения. Также рассматривается вариант публикации кода без транспиляции, но в этом случае увеличится время сборки.Очень полезное предложение. Думаю, что бандлеры адаптируют предлагаемый подход или как минимум придут к какому-нибудь другому альтернативному решению
#proposal #perfomance #npm
https://dev.to/garylchew/bringing-modern-javascript-to-libraries-432c
DEV Community
Bringing Modern JavaScript to Libraries
tl;dr: To bring modern JavaScript to our libraries, we should adopt a new "browser2017" conditional...
Сегодня вышла седьмая версия npm. Майлз Боринс рассказал про новые фичи релиза — "Presenting v7.0.0 of the npm CLI ".
В npm v7 была добавлена поддержка воркспейсов (workspaces). С их помощью добавляется возможность удобного управления вложенными пакетами из корневого пакета.
В новой версии
В package-lock используется новый формат, который гарантирует создание воспроизводимых сборок. Также была добавлена поддержка yarn.lock для получения информации о метаданных и разрешения зависимостей.
Ломающие изменения: автоматическая установка peerDependencies; теперь нельзя зареквайрить внутренние модули npm;
Седьмая версия будет поставляться с Node.js v15 (выходит на следующей неделе) или её можно установить самостоятельно (
#npm #release #nodejs
https://github.blog/2020-10-13-presenting-v7-0-0-of-the-npm-cli/
В npm v7 была добавлена поддержка воркспейсов (workspaces). С их помощью добавляется возможность удобного управления вложенными пакетами из корневого пакета.
В новой версии
peerDependencies
будут устанавливаться автоматически. В npm v6 установщику не предоставлялась информация о peerDependencies
, поэтому их надо было устанавливать самостоятельно.В package-lock используется новый формат, который гарантирует создание воспроизводимых сборок. Также была добавлена поддержка yarn.lock для получения информации о метаданных и разрешения зависимостей.
Ломающие изменения: автоматическая установка peerDependencies; теперь нельзя зареквайрить внутренние модули npm;
npx
был переписан, в новой версии он работает поверх npm exec
, что повлекло за собой разные изменения; изменился вывод команды npm audit
.Седьмая версия будет поставляться с Node.js v15 (выходит на следующей неделе) или её можно установить самостоятельно (
npm i -g npm@7
).#npm #release #nodejs
https://github.blog/2020-10-13-presenting-v7-0-0-of-the-npm-cli/
The GitHub Blog
Presenting v7.0.0 of the npm CLI
We’re releasing v7.0.0 of the npm CLI, which includes exciting new features such as Workspaces, automatically installed peer deps, and more!
Лукас Ф. Коста — автор библиотеки Chai.js — написал статью про package-lock.json — "Why does package-lock.json exist, and how does it work?".
При повторной установке пакетов с зафиксированными версиями результирующий node_modules может отличаться, так как могут быть обновлены зависимости зависимостей. Чтобы добиться детерминированной установки в npm используется файл package-lock.json, в котором явно описываются все версии всех зависимостей.
При запуске команды
В общем, полезная статья. Рекомендую почитать, если хочется разобраться в этой теме подробнее.
#npm
https://lucasfcosta.com/2020/10/17/lockfile-guide.html
При повторной установке пакетов с зафиксированными версиями результирующий node_modules может отличаться, так как могут быть обновлены зависимости зависимостей. Чтобы добиться детерминированной установки в npm используется файл package-lock.json, в котором явно описываются все версии всех зависимостей.
При запуске команды
npm i
установщик получает список зависимостей проекта из package.json и во время их установки обновляет package-lock.json, записывая туда полное дерево зависимостей с необходимой метаинформацей. Для установки пакетов из package-lock.json нужно использовать другую команду — npm ci
. Эта команда устанавливает все зависимости, создавая идентичное дерево зависимостей на момент последнего выполнения npm i
. Кроме детерминированности npm ci
даёт очень хороший буст в скорости установки пакетов, поэтому чаще всего её используют в CI-системах.В общем, полезная статья. Рекомендую почитать, если хочется разобраться в этой теме подробнее.
#npm
https://lucasfcosta.com/2020/10/17/lockfile-guide.html
Lucas F. Costa
Why does package-lock.json exist, and how does it work?
When writing JavaScript applications, you describe its dependencies using a package.json file. This file contains all of your applications direct dependencies and their versions.
Алекс Бирсан — исследователь в области информационной безопасности — опубликовал статью о том, как ему удалось получить доступ к внутренним сетям 35 организаций — "Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies".
Из публичных источников (GitHub, ресурсы сайтов и т.п.) были собраны имена приватных пакетов, которые доступны только из внутренних сетей организаций. Для этих пакетов в публичных репозиториях (npm, PyPi, RubyGems) были опубликованы одноимённые пакеты. Из-за ошибки в конфигурации некоторые билд-системы начали скачивать и устанавливать пакеты из публичного репозитория. Таким образом Алекс получил доступ к внутренним сетям Apple, Microsoft, PayPal, Uber, Yelp.
После публикации статьи Microsoft выпустила документ с рекомендациями для предотвращения подобных ошибок в npm, yarn, NuGet Gallery, Pip, Gradle и Maven Central.
Советы для npm: используйте scoped packages, настройте npm так, чтобы в приоритете был приватный реестр, не удаляйте
#security #npm
https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610
https://azure.microsoft.com/en-us/resources/3-ways-to-mitigate-risk-using-private-package-feeds/
Из публичных источников (GitHub, ресурсы сайтов и т.п.) были собраны имена приватных пакетов, которые доступны только из внутренних сетей организаций. Для этих пакетов в публичных репозиториях (npm, PyPi, RubyGems) были опубликованы одноимённые пакеты. Из-за ошибки в конфигурации некоторые билд-системы начали скачивать и устанавливать пакеты из публичного репозитория. Таким образом Алекс получил доступ к внутренним сетям Apple, Microsoft, PayPal, Uber, Yelp.
После публикации статьи Microsoft выпустила документ с рекомендациями для предотвращения подобных ошибок в npm, yarn, NuGet Gallery, Pip, Gradle и Maven Central.
Советы для npm: используйте scoped packages, настройте npm так, чтобы в приоритете был приватный реестр, не удаляйте
package-lock.json
и используйте npm ci
для установки зависимостей.#security #npm
https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610
https://azure.microsoft.com/en-us/resources/3-ways-to-mitigate-risk-using-private-package-feeds/
Medium
Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies
The Story of a Novel Supply Chain Attack
Том МакРайт рассказал о своём подходе к работе с зависимостями — "Vendor by default".
Том использует вендоринг для небольших зависимостей, то есть копирует их исходный код к себе в проект. При копировании кода он его читает, рефакторит и удаляет неиспользуемые части. Такой подход позволяет лучше разобраться в библиотеке и понять её ограничения. Иногда бывает так, что он начинает рефакторить код зависимости и понимает, что будет проще написать её самому или что нужно найти альтернативу.
Интересная статья. Похоже на какую-то крайность, но почему бы и нет, если это решает проблему раздувания бандла приложения.
#npm #js #musings
https://macwright.com/2021/03/11/vendor-by-default.html
Том использует вендоринг для небольших зависимостей, то есть копирует их исходный код к себе в проект. При копировании кода он его читает, рефакторит и удаляет неиспользуемые части. Такой подход позволяет лучше разобраться в библиотеке и понять её ограничения. Иногда бывает так, что он начинает рефакторить код зависимости и понимает, что будет проще написать её самому или что нужно найти альтернативу.
Интересная статья. Похоже на какую-то крайность, но почему бы и нет, если это решает проблему раздувания бандла приложения.
#npm #js #musings
https://macwright.com/2021/03/11/vendor-by-default.html
macwright.com
Vendor by default
Just copy that sucker into your source tree why don’t you
Уменьшение размера npm-пакетов AWS SDK
Тривикрам Камат из Amazon написал статью про опыт уменьшения размера npm-пакетов — "How we halved the publish size of modular AWS SDK for JavaScript clients".
Тривикрам работает над JavaScript-версией AWS SDK, который используется в окружениях с жёсткими квотами, поэтому размер npm-пакетов играет важную роль. Для сокращения объёма устанавливаемого кода были удалены JSDoc-комментарии из JS- и d.ts-файлов, сгенерированных с помощью библиотеки
Благодаря удалению лишнего кода размер пакетов уменьшился на ~50%.
#npm #optimization #typescript
https://aws.amazon.com/blogs/developer/how-we-halved-the-publish-size-of-modular-aws-sdk-for-javascript-clients/
Тривикрам Камат из Amazon написал статью про опыт уменьшения размера npm-пакетов — "How we halved the publish size of modular AWS SDK for JavaScript clients".
Тривикрам работает над JavaScript-версией AWS SDK, который используется в окружениях с жёсткими квотами, поэтому размер npm-пакетов играет важную роль. Для сокращения объёма устанавливаемого кода были удалены JSDoc-комментарии из JS- и d.ts-файлов, сгенерированных с помощью библиотеки
downlevel-dts
для старых версий TypeScript. Был удалён исходный TypeScript-код и сорсмапы. Для удобства отладки запланирован релиз специальной дебаг-версии пакетов.Благодаря удалению лишнего кода размер пакетов уменьшился на ~50%.
#npm #optimization #typescript
https://aws.amazon.com/blogs/developer/how-we-halved-the-publish-size-of-modular-aws-sdk-for-javascript-clients/
Amazon
How we halved the publish size of modular AWS SDK for JavaScript clients | Amazon Web Services
On December 15th, 2020, we announced the general availability of the AWS SDK for JavaScript, version 3 (v3). In v3, the modular packages reduce the bundle size of your application by ~75% as compared to that in AWS SDK for JavaScript, version 2 (v2). However…
Компроментация npm-пакетов coa и rc
В четверг были скомпрометированы npm-пакеты coa и rc. На первый пакет приходится 7 миллионов загрузок в неделю, на последний — 14 миллионов.
Во взломанных пакетах был размещён Windows-троян, который воровал сохранённые пароли, данные кредитных карт и т.п.
На данный момент вредоносные версии пакетов уже удалены, но специалисты по безопасности рекомендуют на всякий случай проверить в системе наличие вредоносных файлов:
#npm #security
https://www.bleepingcomputer.com/news/security/popular-coa-npm-library-hijacked-to-steal-user-passwords/
В четверг были скомпрометированы npm-пакеты coa и rc. На первый пакет приходится 7 миллионов загрузок в неделю, на последний — 14 миллионов.
Во взломанных пакетах был размещён Windows-троян, который воровал сохранённые пароли, данные кредитных карт и т.п.
На данный момент вредоносные версии пакетов уже удалены, но специалисты по безопасности рекомендуют на всякий случай проверить в системе наличие вредоносных файлов:
compile.js
, compile.bat
, sdd.dll
. Для предотвращения подобных инцидентов npm советует включить двухфакторную аутентификацию.#npm #security
https://www.bleepingcomputer.com/news/security/popular-coa-npm-library-hijacked-to-steal-user-passwords/
BleepingComputer
Popular 'coa' NPM library hijacked to steal user passwords
Popular npm library 'coa' was hijacked today with malicious code injected into it, ephemerally impacting React pipelines around the world. The 'coa' library, short for Command-Option-Argument, receives about 9 million weekly downloads on npm, and is used…
Преимущества хранения node_modules в git
Джек Франклин из команды разработки Chrome DevTools написал статью о том, почему они коммитят зависимости в систему контроля версий — "Why you should check-in your node dependencies".
Плюсы такого подхода:
— ускорение разворачивания проекта и уменьшение нагрузки на сеть;
— гарантированная воспроизводимость сборок;
— независимость от центрального хранилища кода;
— осознанное использование зависимостей.
Также в статье упоминается про большие диффы при добавлении зависимостей. Эта проблема у них частично решена запретом обновления проектного кода вместе с кодом зависимостей. Про минусы больше ничего нет, однако при таком подходе как минимум появляются проблемы при использовании нативных модулей.
#npm
https://www.jackfranklin.co.uk/blog/check-in-your-node-dependencies/
Джек Франклин из команды разработки Chrome DevTools написал статью о том, почему они коммитят зависимости в систему контроля версий — "Why you should check-in your node dependencies".
Плюсы такого подхода:
— ускорение разворачивания проекта и уменьшение нагрузки на сеть;
— гарантированная воспроизводимость сборок;
— независимость от центрального хранилища кода;
— осознанное использование зависимостей.
Также в статье упоминается про большие диффы при добавлении зависимостей. Эта проблема у них частично решена запретом обновления проектного кода вместе с кодом зависимостей. Про минусы больше ничего нет, однако при таком подходе как минимум появляются проблемы при использовании нативных модулей.
#npm
https://www.jackfranklin.co.uk/blog/check-in-your-node-dependencies/
Cовременные возможности для работы с JavaScript-модулями
Аксель Раушмайер написал статью про современные возможности для работы с JavaScript-модулями — "Publishing and consuming ECMAScript modules via packages – the big picture".
Последние версии Node.js поддерживают package exports и package imports. Package exports используются авторами библиотек для настройки путей, по которым будет доступен импорт модулей. Package imports позволяют создавать альясы на пакеты или модули. Их можно использовать для подмены реализации модуля в зависимости от окружения. Package exports и package imports настраиваются в package.json.
В браузерах скоро появится поддержка import maps. С их помощью можно создавать альясы, относительно которых будут резолвиться спецификаторы модулей в браузере. Это полезно при доставке кода пользователям в чистом ESM, когда в названии файлов модулей есть хеши. Import maps уже используют в проде авторы почтового клиента hey.
#js #esm #nodejs #npm
https://2ality.com/2022/01/esm-specifiers.html
Аксель Раушмайер написал статью про современные возможности для работы с JavaScript-модулями — "Publishing and consuming ECMAScript modules via packages – the big picture".
Последние версии Node.js поддерживают package exports и package imports. Package exports используются авторами библиотек для настройки путей, по которым будет доступен импорт модулей. Package imports позволяют создавать альясы на пакеты или модули. Их можно использовать для подмены реализации модуля в зависимости от окружения. Package exports и package imports настраиваются в package.json.
В браузерах скоро появится поддержка import maps. С их помощью можно создавать альясы, относительно которых будут резолвиться спецификаторы модулей в браузере. Это полезно при доставке кода пользователям в чистом ESM, когда в названии файлов модулей есть хеши. Import maps уже используют в проде авторы почтового клиента hey.
#js #esm #nodejs #npm
https://2ality.com/2022/01/esm-specifiers.html
Ускорение установки зависимостей с помощью tnpm
На dev.to была опубликована статья разработчика Alibaba про ускорение установки зависимостей в Node.js — "In-depth of tnpm rapid mode - how we managed to be 10 second faster than pnpm".
Автор статьи занимается разработкой tnpm — проприетарного реестра JavaScript-пакетов и клиента, использующихся в проектах Alibaba.
Для ускорения процесса установки команда переделала архитектуру tnpm. В новом решении построение графа зависимостей пакетов происходит на сервере, значительно снижая количество HTTP-запросов на стороне клиента. Зависимости перед отправкой на клиент бандлятся в небольшое количество tar-файлов, улучшая утилизацию сети и уменьшая число обращений к диску. Полученные тарболлы не распаковываются, а лежат в хранилище, доступ к которому предоставляется с помощью npmfs — FUSE-модуля, реализующего кастомную файловую систему для работы с пакетами. Таким образом для пользователя и для Node.js ничего не меняется — они видят файлы, которые на самом деле лежат в запакованном виде. Использование FUSE накладывает ограничения на поддерживаемые операционные системы — на данный момент поддерживается только Linux.
Эти изменения позволили значительно улучшить скорость установки зависимостей, опередив в бенчмарке pnpm на 9 секунд. Автор пишет, что они планируют открыть исходный код npmfs в будущем.
Меня лично немного пугает получившийся монстр, но с точки зрения ускорения воркфлоу разработки — это очень интересное решение.
#npm #performance
https://dev.to/atian25/in-depth-of-tnpm-rapid-mode-how-could-we-fast-10s-than-pnpm-3bpp
На dev.to была опубликована статья разработчика Alibaba про ускорение установки зависимостей в Node.js — "In-depth of tnpm rapid mode - how we managed to be 10 second faster than pnpm".
Автор статьи занимается разработкой tnpm — проприетарного реестра JavaScript-пакетов и клиента, использующихся в проектах Alibaba.
Для ускорения процесса установки команда переделала архитектуру tnpm. В новом решении построение графа зависимостей пакетов происходит на сервере, значительно снижая количество HTTP-запросов на стороне клиента. Зависимости перед отправкой на клиент бандлятся в небольшое количество tar-файлов, улучшая утилизацию сети и уменьшая число обращений к диску. Полученные тарболлы не распаковываются, а лежат в хранилище, доступ к которому предоставляется с помощью npmfs — FUSE-модуля, реализующего кастомную файловую систему для работы с пакетами. Таким образом для пользователя и для Node.js ничего не меняется — они видят файлы, которые на самом деле лежат в запакованном виде. Использование FUSE накладывает ограничения на поддерживаемые операционные системы — на данный момент поддерживается только Linux.
Эти изменения позволили значительно улучшить скорость установки зависимостей, опередив в бенчмарке pnpm на 9 секунд. Автор пишет, что они планируют открыть исходный код npmfs в будущем.
Меня лично немного пугает получившийся монстр, но с точки зрения ускорения воркфлоу разработки — это очень интересное решение.
#npm #performance
https://dev.to/atian25/in-depth-of-tnpm-rapid-mode-how-could-we-fast-10s-than-pnpm-3bpp
DEV Community
In-depth of tnpm rapid mode - how we managed to be 10 second faster than pnpm
Background As a front-end veteran, I have to point out that the increasing complexity of...