Каковы минимальные возможности npm?
Я создал небольшой установщик зависимостей Node.js под названием «dep», который похож на небольшой npm. Я расскажу о депе и расскажу свою мысль.
Вы можете сомневаться, что Dep изобретает колесо npm, но это колесо намного меньше, чем npm.
Переосмыслить npm
Как участник я видел, как команда npm растет за пару лет. Мы добавили множество функций, запрошенных пользователями, и это увеличило размер базы кода. Чем больше мы добавляем функций, тем сложнее становится, и я чувствую, что это усложняет исправление ошибок.
Когда я также вижу $npm --help
, он задает мне вопрос.
Сколько видов подкоманд npm я часто использую ежедневно?
Фактически, в 2015 году уже было сказано, что npm очень сложен.
Хотя сложность обработки зависимостей git в npm почти фрактальна (потому что npm очень сложен, а git еще сложнее),
В последнее время люди постепенно пришли к выводу, что у npm есть минимум функций, чтобы иметь простую.
- Https://github.com/nodejs/node/issues/11835
- Https://github.com/nodejs/node/issues/11903
- Https://github.com/nodejs/node/issues/12073
Конечно, нет правильного ответа на вопрос, какой минимум, из-за большого количества вариантов использования.
Наибольший общий фактор всегда зависит от данного контекста.
В данном случае контекст - это целевой пользователь, и я самостоятельно нашел ответ на эту проблему.
Конечный пользователь
Я догнал идею модуля конечный пользователь. Это не автор модуля и не пользователь модуля, а просто конечный пользователь модуля .
Конечный пользователь - это тот, кто создает программное обеспечение с модулями и не создает свой собственный модуль для публикации.
Что они делают:
- Установить зависимости, определенные в package.json
- Развертывание приложения в производственной среде с заблокированными зависимостями
- Запуск скриптов тестирования / сборки / выпуска, определенных в package.json.
Оказывается, единственные функции, которые мы должны поддерживать для конечного пользователя, - это установка, блокировка и запуск.
Эта идея прояснила масштаб.
Привет, деп!
Итак, я сделал dep: https://github.com/depjs/dep
Деп имеет только следующие три функции:
- Установите зависимости, определенные в локальном package.json.
- [WIP] Заблокируйте зависимости, установленные в локальном node_modules.
- Выполнить произвольную команду из сценариев в локальном package.json.
Я постарался сделать их такими же, насколько это возможно, с помощью npm, поэтому на этот раз я пропущу базовое описание команды. Смотрите README.md для получения дополнительной информации.
Bethink npm
Переосмысливая npm, я обдумываю все с нуля, поскольку сейчас самое подходящее время. Например, как я пытался, очень важна совместимость с npm. Интерфейс в командной строке должен быть таким же, как в @bitandbang.
Затем я сделал тот же интерфейс для большинства команд и опций, которые должны поддерживаться в dep, но есть несколько разных внутренних реализаций.
dep ❤️ dat
Это полностью экспериментальная функция, и ее можно изменить в любое время, как экспериментальную функцию Node.js.
dep поддерживает протокол dat как ресурс зависимости.
{ "name": "an-app", "description": "an example app", "dependencies": { "emoji-cli": "dat://7fdbb7b4ea8be0e5d9c1469aa4056377a092d8787b6e3452faf0ce8390098d02" } }
Хотя реестр npm великолепен, поскольку реестр данных работает с совершенно другими концепциями и технологиями, просто мне было интересно поддержать это. Для получения дополнительной информации о проекте dat посетите их веб-сайт:
dep 💔 локальный кеш
Скорость и емкость локального диска - это компромисс, но я хотел бы взять и то, и другое.
Я думаю о разработке создания кеша в таком месте, как прокси-сервер, вместо того, чтобы создавать его напрямую на локальном диске. Из-за этого dep пока не создает файлы кеширования на локальном диске.
dep ❤️ Окна
Цель состоит в том, чтобы сохранить небольшой размер и состояние, при котором ошибки можно легко исправить. Я бы сказал, что следующие значки - это то, о чем заботится деп.
Количество функций и время тестирования пропорциональны.
Подвести итог
Подобно тому, как богатая функция является значением, малость также является ценностью. Основываясь на простоте исправления ошибок, я продолжаю сохранять dep. Было бы здорово, если бы вы могли выбрать диспетчер пакетов для встраивания в ядро Node.js.
Используйте его и поделитесь своими мыслями о репо: 3
Кроме того, я хотел бы дать активным участникам разрешение на чтение / запись.
Https://github.com/watilde/dep
dep ️ и npm
И последнее, но не менее важное: мне по-прежнему нравится npm, и это одна из причин, почему я пытаюсь добиться совместимости с npm.
Большое спасибо @ReBeccaOrg и @maybekatz за все ваши советы!
Хорошей пятницы👋
xoxo,
@watilde