Использование Rails 5.1 для отправки скомпилированного ресурса webpacker в качестве ответа - PullRequest
0 голосов
/ 10 июня 2018

Заранее спасибо.

Я пытаюсь, чтобы мое приложение Rails 5.1 отвечало на запрос application / javascript.

По сути, я хочу иметь возможность поместить тег с src, указывающим на мое приложение Rails, чтобы я мог запросить выполнение файла JS.

У меня в app / javascript / packs есть файл, который пока имеет только console.log( 'hello_world' ).Все, что я хочу сделать, это выполнить на моей странице.

У меня есть действие контроллера, которое выглядит следующим образом:

def hello_world_js
  send_file(
    "#{Rails.root}/app/public/packs/hello_world.js",
    :filename => "hello_world.js",
    :type => "application/javascript"
  )
end

Запрос src приводит к этому действию контроллера.Я, однако, получаю следующую ошибку:

ActionController::MissingFile (Cannot read file /Users/mac/Workspace/rails_app_dir/app/public/packs/hello_world.js)

Это имеет смысл для меня.

Как правило, у вас будет javascript_pack_tag в файле представления, который вызовет компиляцию и возврат javascript src.Тем не менее, я не рассматриваю эти движения, поэтому у меня нет готового скомпилированного файла JS.

Как я могу настроить его так, чтобы это могло быть вызвано запросом <script/> src?

Проецируя в будущее, я предполагаю, что скомпилированный файл будет иметь строку символов после своего имени.hello_world.js будет на самом деле что-то вроде hello_world-8f87b73be32a9b3e4fb2.js - как мне это приспособить?

Одним из решений, которое приходит на ум, является использование конечной точки для рендеринга файла .js.erb, который затем добавляет тег снова.Я хочу избежать этого, потому что тогда я делаю два запроса на свой сервер.

Любой вклад очень ценится.Спасибо.

1 Ответ

0 голосов
/ 10 июня 2018

Мне удалось выяснить это, посмотрев на исходный код Webpacker.

Я могу найти общедоступный файл и триггерную компиляцию в dev-форме контроллера через:

Webpacker.manifest.lookup!( 'hello_world.js' )

Webpacker :: Manifest можно найти здесь .

На самом деле, я нашел это, ища определение javascript_pack_tag.

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

...