“Could not find a JavaScript runtime” when building the website

Hello, I get the following error after running bundle exec jekyll s --trace --watch:

bundler: failed to load command: jekyll (/Users/tommi/.rbenv/versions/3.0.1/bin/jekyll)
/Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/execjs-2.7.0/lib/execjs/runtimes.rb:58:in `autodetect': Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/execjs-2.7.0/lib/execjs.rb:5:in `<module:ExecJS>'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/execjs-2.7.0/lib/execjs.rb:4:in `<top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/uglifier-4.2.0/lib/uglifier.rb:5:in `require'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/uglifier-4.2.0/lib/uglifier.rb:5:in `<top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-webmention_io-3.3.5/lib/jekyll/generators/compile_js.rb:10:in `require'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-webmention_io-3.3.5/lib/jekyll/generators/compile_js.rb:10:in `<top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-webmention_io-3.3.5/lib/jekyll/webmention_io.rb:385:in `require'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-webmention_io-3.3.5/lib/jekyll/webmention_io.rb:385:in `block in require_all'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-webmention_io-3.3.5/lib/jekyll/webmention_io.rb:384:in `each'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-webmention_io-3.3.5/lib/jekyll/webmention_io.rb:384:in `require_all'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-webmention_io-3.3.5/lib/jekyll/webmention_io.rb:390:in `<top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-webmention_io-3.3.5/lib/jekyll-webmention_io.rb:4:in `require'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-webmention_io-3.3.5/lib/jekyll-webmention_io.rb:4:in `<top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/runtime.rb:66:in `require'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/runtime.rb:66:in `block (2 levels) in require'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/runtime.rb:61:in `each'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/runtime.rb:61:in `block in require'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/runtime.rb:50:in `each'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/runtime.rb:50:in `require'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler.rb:173:in `require'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/plugin_manager.rb:51:in `require_from_bundler'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/exe/jekyll:11:in `<top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/bin/jekyll:23:in `load'
	from /Users/tommi/.rbenv/versions/3.0.1/bin/jekyll:23:in `<top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/cli/exec.rb:63:in `load'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/cli/exec.rb:63:in `kernel_load'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/cli/exec.rb:28:in `run'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/cli.rb:494:in `exec'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/cli.rb:30:in `dispatch'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/cli.rb:24:in `start'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/bundler-2.2.15/libexec/bundle:49:in `block in <top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/friendly_errors.rb:130:in `with_friendly_errors'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/bundler-2.2.15/libexec/bundle:37:in `<top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/bin/bundle:23:in `load'
	from /Users/tommi/.rbenv/versions/3.0.1/bin/bundle:23:in `<main>'

I performed both bundle and bundle install, everything seems fine. i get such error only when I build the website.

Your site needs to run JavaScript to build the site but it has nowhere to run it.

Install Node as a JS runtime. This is independent of the gems installed but will be used by the gems.

brew install node

More info

The top of your error points you here. Node is on the list so use that.

Note that Node is ideal for build steps let’s you run JavaScript on your machine without a browser and let’s you download and use Node packages.

In particular I guess the uglifier gem in your traceback is going to run the uglifier JS package to minify the JS files.

Like it will do something like this:

npm install uglifier 
uglifier index.js
1 Like

By the way

--watch is implied. Try jekyll -h and you’ll see it defaults to on. So if you change a file and save it then Jekyll will auto rebuild.

But you might like to add the ability to auto refresh an open browser page on the rebuild.

--livereload

1 Like

Ok, I did it. Now, I get another error. I don’t understand where I am giving too many arguments, though:

bundle exec jekyll serve
Configuration file: /Users/tommi/tommi.space/_config.yml
            Source: /Users/tommi/tommi.space
       Destination: /Users/tommi/tommi.space/_site
 Incremental build: disabled. Enable with --incremental
      Generating...
jekyll 3.9.1 | Error:  wrong number of arguments (given 2, expected 1)
/Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/csv.rb:1656:in `read': wrong number of arguments (given 2, expected 1) (ArgumentError)
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/readers/data_reader.rb:57:in `read_data_file'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/readers/data_reader.rb:46:in `block in read_data_to'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/readers/data_reader.rb:38:in `each'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/readers/data_reader.rb:38:in `read_data_to'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/readers/data_reader.rb:20:in `read'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/reader.rb:18:in `read'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/site.rb:164:in `read'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/site.rb:69:in `process'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/command.rb:28:in `process_site'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/commands/build.rb:65:in `build'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/commands/build.rb:36:in `process'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/commands/serve.rb:93:in `block in start'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/commands/serve.rb:93:in `each'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/commands/serve.rb:93:in `start'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/lib/jekyll/commands/serve.rb:75:in `block (2 levels) in init_with_program'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `block in execute'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `each'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/mercenary-0.3.6/lib/mercenary/command.rb:220:in `execute'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/mercenary-0.3.6/lib/mercenary/program.rb:42:in `go'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/mercenary-0.3.6/lib/mercenary.rb:19:in `program'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/jekyll-3.9.1/exe/jekyll:15:in `<top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/bin/jekyll:23:in `load'
	from /Users/tommi/.rbenv/versions/3.0.1/bin/jekyll:23:in `<top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/cli/exec.rb:63:in `load'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/cli/exec.rb:63:in `kernel_load'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/cli/exec.rb:28:in `run'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/cli.rb:494:in `exec'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/cli.rb:30:in `dispatch'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/cli.rb:24:in `start'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/bundler-2.2.15/libexec/bundle:49:in `block in <top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/friendly_errors.rb:130:in `with_friendly_errors'
	from /Users/tommi/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/bundler-2.2.15/libexec/bundle:37:in `<top (required)>'
	from /Users/tommi/.rbenv/versions/3.0.1/bin/bundle:23:in `load'
	from /Users/tommi/.rbenv/versions/3.0.1/bin/bundle:23:in `<main>'

Thanks, I will improve my _config.yml adding the flags I commonly use.

The error is number of arguments used in csv.rb, not the command line.

Are you loading CSV data files? Do you have any spaces in the filename or bad number of columns etc. That might cause the error?

As suggested in other topics, downgrade to Ruby 2.7 if you have Jekyll errors.

Add --trace if you didn’t already. It helps me a lot with getting verbose errors.