Несколько дней назад я работал над рубиновым проектом, который упаковывает активы сам по себе, вопрос «как?» это для следующего поста.

Эксперты по Javascript наверняка думают, что в своем любимом менеджере ресурсов/упаковщике и рубиновых парнях следует спрашивать, почему/как приложение ruby ​​упаковывает свои активы, без рельсов, звездочек или?

Что ж, поскольку я притворяюсь, что сохраняю этот пост в качестве ссылок для будущих выпусков, я только скажу, что у меня есть задача rake, которая позволяет мне запускать bundle exec rake assets:precompile, а внутри вызывает webpack --progress, и внезапно команда не была найдена.

Понятно, что задача зависит от webpack, поэтому эта команда должна быть доступна в вашем терминале, но как мы можем этого добиться?

Webpack рекомендует установить инструмент локально и использовать скрипты npm для команд. (https://webpack.js.org/guides/getting-started/) Тем не менее, npm-скрипт является синонимом нашей rake-задачи в мире js, но за npm-скриптом скрывается хитрость. Npm запускает команды, используя исполняемые файлы модулей узла, хранящиеся в папке bin (https://docs.npmjs.com/misc/scripts#path), поэтому наша задача rake должна запускаться webpack с использованием этого исполняемого файла.

Поэтому это дало нам несколько вариантов решения этой проблемы. Одним из вариантов может быть изменение нашей задачи rake для выполнения ./node_modules/.bin/webpack --progress. Другой вариант — установить webpack глобально (помните, что это не рекомендуется командой webpack), но похоже, что задача rake ожидает этого. Я нашел другое решение, которое экспортирует исполняемую папку по вашему пути.

Используя команду npm bin, вы можете узнать, где находятся исполняемые файлы, поэтому я экспортировал их в свой путь export PATH="$(npm bin):$PATH". Это позволяет мне продолжать использовать задачу rake и сделать команду webpack доступной в терминале без доступа к папке exec node_modules. Однако я не уверен, что это решение лучше, чем установленное webpack глобально, и, согласно документам npm bin, эта команда извлекает папку и может получить глобальную папку с параметром -g, что означает, что обычная команда извлекает папку по умолчанию/ local node_modules, потому что мы можем перезагрузить терминал и экспортировать в путь исполняемую папку текущего модуля узла проекта.

Обратите внимание, что для веб-пакета версии 4 или более поздней вам потребуется установить интерфейс командной строки (https://webpack.js.org/guides/installation), и он может немного отличаться.

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