Прошли те времена, когда было достаточно объединить и испортить ваш исходный код. Поскольку es6 и es7 развиваются быстрее, чем производители браузеров успевают, машинописный текст и потоковая проверка типов, а также другие аберрантные требования ваш проект может иметь , желание использовать что-то для волшебного конвейера и связки одним махом может быть весьма привлекательным. Это приводит нас к созданию таких инструментов, как webpack, grunt и gulp. Рукой хирурга и обилием сторонних модулей вы можете тщательно сконструировать что-то, что выплюнет все ваши активы с чем-то вроде: gulp build.

Потрясающий. Правильно? По крайней мере, в течение нескольких недель, пока одна из зависимостей не станет устаревшей|сломается, и вам нужно будет обновиться, и как только вы узнаете, что сейчас час ночи, и всю ночь вам была представлена ​​такая инфографика:

Итак, давайте распакуем это (каламбур). Эти автоматы узлов представляют собой третий уровень абстракции поверх реальных утилит, которые выполняют тяжелую работу. Сила клея, который скрепляет эти два слоя, зависит от разработчика или разработчиков, которые могут или не могут делать все возможное, чтобы уделять внимание разработчикам, которые поддерживают утилиты, с которыми они взаимодействуют. Клей сломается через некоторое время, если вы не уследите за всеми этими слоями. Даже если вы будете бдительны, вы, вероятно, не хорошо проведете время.

Растет число людей, недовольных активным сообществом JavaScript/node из-за количества новых инструментов, создаваемых каждый день. Я считаю, что настоящее разочарование начинается с того, как эти инструменты интегрированы.

Итак, как мы можем сделать это лучше? Я хотел бы предложить более сильный и автономный подход:

  • Не засоряйте файл package.json вашего проекта модулями, связанными со сборкой. Любой из них — browserify, babel, sass и т. д. Даже если вы умеете держать их в devDependencies. Держите проект в чистоте в папке src/. В корне сохраните еще один файл package.json, в котором хранятся все модули, связанные со сборкой или разработкой. То, что нужно скомпилировать сегодня, завтра может запуститься (или измениться), поэтому лучше отделить эту зависимость.
- /package.json     <- only dev deps
- /src/package.json <- only application deps
- /src/*            <- the rest of the project
  • Колесо для автоматизации существует уже давно. Используйте bash, shell и файлы Makefile. Если вы еще не читали, isaacs (создатель npm) написал отличное введение в Makefiles. Это позволит вам взаимодействовать с утилитами напрямую, а не через что-то вроде webpack, gulp или grunt. Преимущества: 1) Вы всегда будете использовать 100% доступных вам опций, не полагаясь на сопровождающих для обновления основной ветки, потому что вы используете настоящую программу, а не интерфейс к ней. 2) Это также позволяет избежать третьего уровня абстракции — слабого клея.

Наконец, я оставлю вам немного вдохновения для фактического выполнения этого в виде репозитория git, здесь.

Так как насчет того, чтобы не пытаться автоматизировать все с помощью одной вещи?