Каковы минимальные возможности npm?

Я создал небольшой установщик зависимостей Node.js под названием «dep», который похож на небольшой npm. Я расскажу о депе и расскажу свою мысль.

Вы можете сомневаться, что Dep изобретает колесо npm, но это колесо намного меньше, чем npm.

Переосмыслить npm

Как участник я видел, как команда npm растет за пару лет. Мы добавили множество функций, запрошенных пользователями, и это увеличило размер базы кода. Чем больше мы добавляем функций, тем сложнее становится, и я чувствую, что это усложняет исправление ошибок.

Когда я также вижу $npm --help, он задает мне вопрос.

Сколько видов подкоманд npm я часто использую ежедневно?

Фактически, в 2015 году уже было сказано, что npm очень сложен.

Хотя сложность обработки зависимостей git в npm почти фрактальна (потому что npm очень сложен, а git еще сложнее),

В последнее время люди постепенно пришли к выводу, что у npm есть минимум функций, чтобы иметь простую.

Конечно, нет правильного ответа на вопрос, какой минимум, из-за большого количества вариантов использования.

Наибольший общий фактор всегда зависит от данного контекста.

В данном случае контекст - это целевой пользователь, и я самостоятельно нашел ответ на эту проблему.

Конечный пользователь

Я догнал идею модуля конечный пользователь. Это не автор модуля и не пользователь модуля, а просто конечный пользователь модуля .

Конечный пользователь - это тот, кто создает программное обеспечение с модулями и не создает свой собственный модуль для публикации.

Что они делают:

  • Установить зависимости, определенные в 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