With the arrival of Webpacker to Ruby On Rails, I can't find a way to use my JavaScript functions.
I have a file called app-globals.js
with a function to test:
function alerts() {
alert("TEST")
}
Then I want to use it in one of my views:
<% = button_tag 'Button', type: 'button', onClick: 'alerts ()'%>
But when I press the button, this error is shown in the browser console:
ReferenceError: alerts is not defined
I placed the
app-globals.js
file in"app/javascript"
and in"app/ javascript/packs/application.js"
I placed require ("app-globals").I moved app-globals.js to
"app/javascript/packs"
and removed the require ("app-globals") fromapplication.js
.
With either case, an error still appears.
With the arrival of Webpacker to Ruby On Rails, I can't find a way to use my JavaScript functions.
I have a file called app-globals.js
with a function to test:
function alerts() {
alert("TEST")
}
Then I want to use it in one of my views:
<% = button_tag 'Button', type: 'button', onClick: 'alerts ()'%>
But when I press the button, this error is shown in the browser console:
ReferenceError: alerts is not defined
I placed the
app-globals.js
file in"app/javascript"
and in"app/ javascript/packs/application.js"
I placed require ("app-globals").I moved app-globals.js to
"app/javascript/packs"
and removed the require ("app-globals") fromapplication.js
.
With either case, an error still appears.
Share Improve this question edited Jun 8, 2020 at 19:02 Syntle 5,1743 gold badges15 silver badges34 bronze badges asked Dec 15, 2019 at 23:50 Johan Donado B.Johan Donado B. 2853 silver badges14 bronze badges 1- Does this answer your question? Rails 5/6: How to include JS functions with webpacker? – Michael Chaney Commented Jun 8, 2020 at 16:57
1 Answer
Reset to default 8There is a workaround, though. You can:
change the function signatures from:
function myFunction() { ... }
to:
window.myFunction = function() { ... }
So in your code we can do like below :-
app/javascript/packs/app-globals.js
window.alerts = function() {
alert ("TEST");
}
and then require this file to application.js :-
app/javascript/packs/application.js
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
require("jquery")
import $ from 'jquery'
window.jQuery = $;
window.$ = $;
require("packs/app-globals") ## require your file