Несколько дней назад я работал над рубиновым проектом, который упаковывает активы сам по себе, вопрос «как?» это для следующего поста.
Эксперты по 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. лучшие практики.