lautis / uglifier

Ruby wrapper for UglifyJS JavaScript compressor.
http://www.rubydoc.info/gems/uglifier
MIT License
613 stars 82 forks source link

Uglifier::Error: - Solution: Switch to terser #185

Open rgaufman opened 2 years ago

rgaufman commented 2 years ago

Hi there,

I am using:

In a previous version of Rails/Ruby (Rails 6 on Ruby 3.0), it was working correctly. However now I just see this:

$ RAILS_ENV=production bundle exec rails assets:precompile
autoprefixer: /Users/hackeron/Development/Tether/timeline/app/assets/stylesheets/application_dark_theme.scss:26033:3: Replace color-adjust to print-color-adjust. The color-adjust shorthand is currently deprecated.
rails aborted!
Uglifier::Error:

Tasks: TOP => assets:precompile
(See full trace by running task with --trace)

When I run with trace, I see this:

$ RAILS_ENV=production bundle exec rails assets:precompile --trace
** Invoke assets:precompile (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
** Execute assets:precompile
autoprefixer: /Users/hackeron/Development/Tether/timeline/app/assets/stylesheets/application_dark_theme.scss:26033:3: Replace color-adjust to print-color-adjust. The color-adjust shorthand is currently deprecated.
rails aborted!
Uglifier::Error:
/usr/local/lib/ruby/gems/3.1.0/gems/uglifier-4.2.0/lib/uglifier.rb:291:in `parse_result'
/usr/local/lib/ruby/gems/3.1.0/gems/uglifier-4.2.0/lib/uglifier.rb:221:in `run_uglifyjs'
/usr/local/lib/ruby/gems/3.1.0/gems/uglifier-4.2.0/lib/uglifier.rb:166:in `compile'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/compressing.rb:84:in `block in js_compressor='
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/processor_utils.rb:84:in `call_processor'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/processor_utils.rb:66:in `block in call_processors'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/processor_utils.rb:65:in `reverse_each'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/processor_utils.rb:65:in `call_processors'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/loader.rb:182:in `load_from_unloaded'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/loader.rb:59:in `block in load'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/loader.rb:337:in `fetch_asset_from_dependency_cache'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/loader.rb:43:in `load'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/cached_environment.rb:44:in `load'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/bundle.rb:32:in `block in call'
/usr/local/Cellar/ruby/3.1.2/lib/ruby/3.1.0/set.rb:511:in `each_key'
/usr/local/Cellar/ruby/3.1.2/lib/ruby/3.1.0/set.rb:511:in `each'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/bundle.rb:31:in `call'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/processor_utils.rb:84:in `call_processor'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/processor_utils.rb:66:in `block in call_processors'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/processor_utils.rb:65:in `reverse_each'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/processor_utils.rb:65:in `call_processors'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/loader.rb:182:in `load_from_unloaded'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/loader.rb:59:in `block in load'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/loader.rb:337:in `fetch_asset_from_dependency_cache'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/loader.rb:43:in `load'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/cached_environment.rb:44:in `load'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/base.rb:81:in `find_asset'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/base.rb:88:in `find_all_linked_assets'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/manifest.rb:125:in `each'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/manifest.rb:125:in `to_a'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/manifest.rb:125:in `block (2 levels) in find'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/safe_task_executor.rb:24:in `block in execute'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb:47:in `block in synchronize'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb:47:in `synchronize'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb:47:in `synchronize'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/safe_task_executor.rb:22:in `execute'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/promise.rb:564:in `block in realize'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:352:in `run_task'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:343:in `block (3 levels) in create_worker'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:334:in `loop'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:334:in `block (2 levels) in create_worker'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:333:in `catch'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:333:in `block in create_worker'
Tasks: TOP => assets:precompile

The autoprefixer warning shows up when I disable uglifier too and doesn't seem to be related to this.

I can't for the life of me figure out what's wrong... any ideas how to troubleshoot this or what could be going wrong?

puneetpandey commented 2 years ago

I am getting the same error during rake assets:precompile when deploying my Rails application to Elastic Beanstalk.

I am using:

[INFO] Running command /bin/su webapp -c bundle exec /opt/elasticbeanstalk/config/private/checkforraketask.rb assets:precompile
[INFO] Found assets:precompile task in Rakefile
[INFO] Running command /bin/su webapp -c bundle exec rake assets:precompile
[INFO] /var/app/staging/app/models/user.rb:74: warning: key :unless is duplicated and overwritten on line 74
I, INFO -- : Writing /var/app/staging/public/assets/base-e93877bbc318b48cb1dc6dd89b3ed50cb854f5b0ed7cbb3c611ef086b54d0abd.js
I, [2022-05-24T14:49:20.044390 #1920]  INFO -- : Writing /var/app/staging/public/assets/base-e93877bbc318b48cb1dc6dd89b3ed50cb854f5b0ed7cbb3c611ef086b54d0abd.js.gz
rake aborted!
Uglifier::Error: 
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/uglifier-4.2.0/lib/uglifier.rb:291:in `parse_result'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/uglifier-4.2.0/lib/uglifier.rb:221:in `run_uglifyjs'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/uglifier-4.2.0/lib/uglifier.rb:166:in `compile'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/compressing.rb:65:in `block in js_compressor='
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/legacy_proc_processor.rb:31:in `call'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:75:in `call_processor'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:57:in `block in call_processors'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `reverse_each'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `call_processors'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:134:in `load_from_unloaded'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:60:in `block in load'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:317:in `fetch_asset_from_dependency_cache'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:44:in `load'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:20:in `block in initialize'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:47:in `load'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/base.rb:66:in `find_asset'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/base.rb:73:in `find_all_linked_assets'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:134:in `block in find'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:133:in `each'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:133:in `find'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:186:in `compile'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-rails-3.4.2/lib/sprockets/rails/task.rb:67:in `block (3 levels) in define'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/rake/sprocketstask.rb:147:in `with_logger'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-rails-3.4.2/lib/sprockets/rails/task.rb:66:in `block (2 levels) in define'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/opt/elasticbeanstalk/.rbenv/versions/2.7.5/bin/bundle:25:in `load'
/opt/elasticbeanstalk/.rbenv/versions/2.7.5/bin/bundle:25:in `<main>'
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)
puneetpandey commented 2 years ago

As per https://github.com/lautis/uglifier/issues/173 I am trying to downgrade Uglifier to 4.1.0 to see if it works

rgaufman commented 2 years ago

When I downgrade to 4.1.0, I see this:

RAILS_ENV=production bundle exec rails assets:precompile
rails aborted!
Uglifier::Error: Unexpected token: punc (.)

Tasks: TOP => assets:precompile
(See full trace by running task with --trace)

When I add --trace, I also see:

/usr/local/lib/ruby/gems/3.1.0/gems/uglifier-4.1.0/lib/uglifier.rb:236:in `parse_result'
/usr/local/lib/ruby/gems/3.1.0/gems/uglifier-4.1.0/lib/uglifier.rb:218:in `run_uglifyjs'
/usr/local/lib/ruby/gems/3.1.0/gems/uglifier-4.1.0/lib/uglifier.rb:168:in `compile'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/compressing.rb:84:in `block in js_compressor='
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/processor_utils.rb:84:in `call_processor'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/processor_utils.rb:66:in `block in call_processors'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/processor_utils.rb:65:in `reverse_each'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/processor_utils.rb:65:in `call_processors'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/loader.rb:182:in `load_from_unloaded'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/loader.rb:59:in `block in load'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/loader.rb:337:in `fetch_asset_from_dependency_cache'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/loader.rb:43:in `load'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/cached_environment.rb:44:in `load'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/base.rb:81:in `find_asset'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/base.rb:88:in `find_all_linked_assets'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/manifest.rb:125:in `each'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/manifest.rb:125:in `to_a'
/usr/local/lib/ruby/gems/3.1.0/gems/sprockets-4.0.3/lib/sprockets/manifest.rb:125:in `block (2 levels) in find'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/safe_task_executor.rb:24:in `block in execute'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb:47:in `block in synchronize'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb:47:in `synchronize'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb:47:in `synchronize'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/safe_task_executor.rb:22:in `execute'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/promise.rb:564:in `block in realize'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:352:in `run_task'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:343:in `block (3 levels) in create_worker'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:334:in `loop'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:334:in `block (2 levels) in create_worker'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:333:in `catch'
/usr/local/lib/ruby/gems/3.1.0/gems/concurrent-ruby-1.1.10/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:333:in `block in create_worker'
Tasks: TOP => assets:precompile
puneetpandey commented 2 years ago

Not worked for me either. I got this:

[INFO] Running command /bin/su webapp -c bundle exec /opt/elasticbeanstalk/config/private/checkforraketask.rb assets:precompile
[INFO] Found assets:precompile task in Rakefile
[INFO] Running command /bin/su webapp -c bundle exec rake assets:precompile
[INFO] /var/app/staging/app/models/user.rb:74: warning: key :unless is duplicated and overwritten on line 74
I, INFO -- : Writing /var/app/staging/public/assets/base-e93877bbc318b48cb1dc6dd89b3ed50cb854f5b0ed7cbb3c611ef086b54d0abd.js
I, INFO -- : Writing /var/app/staging/public/assets/base-e93877bbc318b48cb1dc6dd89b3ed50cb854f5b0ed7cbb3c611ef086b54d0abd.js.gz
rake aborted!
NoMethodError: undefined method `start_with?' for nil:NilClass
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/uglifier-4.1.20/lib/uglifier.rb:225:in `error_message'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/uglifier-4.1.20/lib/uglifier.rb:234:in `parse_result'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/uglifier-4.1.20/lib/uglifier.rb:216:in `run_uglifyjs'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/uglifier-4.1.20/lib/uglifier.rb:168:in `compile'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/compressing.rb:65:in `block in js_compressor='
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/legacy_proc_processor.rb:31:in `call'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:75:in `call_processor'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:57:in `block in call_processors'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `reverse_each'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `call_processors'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:134:in `load_from_unloaded'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:60:in `block in load'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:317:in `fetch_asset_from_dependency_cache'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:44:in `load'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:20:in `block in initialize'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:47:in `load'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/base.rb:66:in `find_asset'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/base.rb:73:in `find_all_linked_assets'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:134:in `block in find'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:133:in `each'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:133:in `find'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:186:in `compile'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-rails-3.4.2/lib/sprockets/rails/task.rb:67:in `block (3 levels) in define'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-3.7.2/lib/rake/sprocketstask.rb:147:in `with_logger'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/sprockets-rails-3.4.2/lib/sprockets/rails/task.rb:66:in `block (2 levels) in define'
/var/app/staging/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/opt/elasticbeanstalk/.rbenv/versions/2.7.5/bin/bundle:25:in `load'
/opt/elasticbeanstalk/.rbenv/versions/2.7.5/bin/bundle:25:in `<main>'
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)

I am using this syntax:

config.assets.js_compressor = Uglifier.new(harmony: true)

No clue what to do next!

puneetpandey commented 2 years ago

@rgaufman are you using @import syntax in your stylesheets? I read this answer https://stackoverflow.com/a/70470984/649868 on StackOverflow to convert .scss to .css and use require instead of @import. Not sure how useful it is and if it fits into our case! Just a FYI

puneetpandey commented 2 years ago

Hi @rgaufman, replacing config.assets.js_compressor = Uglifier.new(harmony: true) with the block below:

config.assets.configure do |env|
  env.js_compressor  = :uglifier # or :closure, :yui
  env.css_compressor = :sass   # or :yui
end

worked for me. I have gem "sprockets-rails", :require => 'sprockets/railtie' in my Gemfile.

Need to confirm if this is a valid fix.

rgaufman commented 2 years ago

I need the harmony: true option as I have a lot of ES6 syntax :(

rgaufman commented 2 years ago

Oh wait, this did actually work, thank you! -- What a great workaround :D

puneetpandey commented 2 years ago

yeah this worked but did it compressed Javascripts with ES6 syntaxes properly? I am now validating this at my end as well

puneetpandey commented 2 years ago

As per Uglifier's Readme: UglifyJS only works with ES5. If you need to compress ES6, ruby-terser is a better option. It seems ES6 won't work well with Uglifier

rgaufman commented 2 years ago

It seems to work, but I have coffee script and I think the asset pipeline is doing some heavy lifting? - terser looks interesting! - Have you switched to this from uglier? - it's strange I don't see it in the ruby docs, Uglifier appears to be the only option that doesn't have Java as a dependency from what I can tell!

puneetpandey commented 2 years ago

I am in process of testing terser. It seems both Uglifier and Terser works on execJS so switching is very easy

rgaufman commented 2 years ago

I tried terser and it seems to have worked as a drop in replacement, I haven't seen any issues with the output yet. Thank you for the workarounds, that's super helpful!

puneetpandey commented 2 years ago

Worked for me too without any issues

RoRroland commented 1 year ago

Thanks @puneetpandey fix my issue too.

msxavi commented 6 days ago

Same problem here in Rails 7.1.

[20] pry(#<Uglifier>)> Uglifier::VERSION
=> "4.2.1"
[21] pry(#<Uglifier>)> ExecJS::VERSION
=> "2.10.0"
[22] pry(#<Uglifier>)> context.call("uglifier", options)
=> {"error"=>{}}

My config uses harmony too:

config.assets.js_compressor = Uglifier.new(harmony: true, compress: { unused: false })

Interesting that @puneetpandey solution works with configure. However config.assets.js_compressor = :uglifier does not.

Uglifier::Error: Unexpected token: keyword (const). To use ES6 syntax, harmony mode must be enabled with Uglifier.new(:harmony => true).

Alternatively:

  config.assets.configure do |env|
    env.js_compressor = Uglifier.new(harmony: true, compress: { unused: false })
  end
rgaufman commented 6 days ago

Use terser instead