Как требовать пользовательские файлы JS в Rails 6
В настоящее время я пытаюсь Rails 6.0.0.rc1, который, кажется, переехал по умолчанию javascript
папка из app/assets/javascript
в app/javascript
, application.js
файл сейчас находится в app/javascript/packs
, Теперь я хочу добавить пару файлов js, но по какой-то причине они не импортируются, и я не могу найти документацию о том, как это можно сделать в Rails 6. Я попробовал пару вещей:
Создать новую папку
custom_js
подapp/javascript/packs
, поместив все мои файлы JS тут же добавитьrequire "custom_js"
вapplication.js
,Скопируйте все мои файлы JS в
app/javascript/channels
(который должен быть включен по умолчанию, так какapplication.js
имеетrequire("channels")
).Добавление
require_tree .
вapplication.js
, который был предыдущий подход.
Как я могу загрузить свои собственные файлы js в приложение Rails 6?
1 ответ
Вам нужно сделать следующие шаги, чтобы добавить пользовательский файл javascript в rails 6 (webpacker)
1. Создайте свой пользовательский файл с именем custom.js
в app/javascript/packs
каталог.
Для тестирования напишите любой console.log
в этом.
// app/javascript/packs/custom.js
console.log("custom js file loaded")
2 Перейти к вашей application.html.erb
и добавьте следующую строку в конце вашего <head></head>
<%= javascript_pack_tag 'custom', 'data-turbolinks-track': 'reload' %>
3 Теперь выполните rake assets:precompile
Это упакует ваш код JavaScript (включая наш пользовательский файл, который мы только что добавили)
Теперь перезагрузите страницу, и вы должны увидеть сообщение
custom js file loaded
в консоли браузера
Надеюсь, поможет:)
Получите более организованный код и избегайте нескольких тегов javascript_pack_tags в файле application.html.erb с помощью этого подхода:
- Добавьте свой заказ
example.js
javascript вapp/javascript/packs
. - добавлять
require("packs/example")
на вашapplication.js
файл.
Я хотел бы добавить комментарий к правильному ответу Асима Хашми. Но у меня недостаточно репутации, поэтому я добавлю свое предложение в качестве ответа.
Нет необходимости включать расширение ".js" внутри файла require.
В моем пользовательском js есть функции, которые будут вызываться встроенным javascript серверами html-страниц. В Rails6 работает следующий фрагмент, скомпилированный webpacker:
- поместите пользовательский файл js в папку app / javascript / packs, например app / javascript / packs / my_functions.js
say_hello = function(a_text){
console.log("HELLO "+ a_text);
}
- добавьте javascript_pack_tag в html файл, например index.html.erb.
<%= javascript_pack_tag 'my_functions' %>
<!-- html here -->
<script>
$(document).ready(function(){
say_hello('ABer')
});
</script>
Примечание: эта строка находится внутри тела HTML, а не в голове
<script src="/packs/js/my_functions-1db66368ebbd2fe31abd.js"></script>
Я знаю, что на этот вопрос уже дан ответ. Но я тоже хочу внести свой ответ. В rails 6 по умолчанию он использовал webpack для компиляции js и css.
Используя Require () или import, вы можете легко включить js в приложение.
- создайте свой собственный файл js в app / javascripts / packs. Пример: app / javascripts / packs / custom.js.
- В вашем application.js (по умолчанию он находится в папке packs) импортируйте пользовательский файл js. EX: импорт './custom.js'
- Используйте этот тег <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload'%> в своем application.html.erb.
- rake assets: прекомпилировать
Теперь обновите страницу, конечно же, работает.
Для дальнейших сомнений обратитесь к моему блогу. Будет полезно Rails 6 - Webpacker