【问题标题】:Ruby on Rails Error: Uglifier::Error: Unexpected token: operator (<)Ruby on Rails 错误:Uglifier::Error: Unexpected token: operator (<)
【发布时间】:2018-05-25 11:23:50
【问题描述】:

每当我在命令行中运行 rake assets:precompile RAILS_ENV=production 时,我都会收到此错误,这会阻止我预编译我的资产。

下面是命令行中显示的完整错误:

rake aborted!
Uglifier::Error: Unexpected token: operator (<)
/usr/local/rvm/gems/ruby-2.3.4/gems/uglifier-4.1.4/lib/uglifier.rb:234:in parse_result'
/usr/local/rvm/gems/ruby-2.3.4/gems/uglifier-4.1.4/lib/uglifier.rb:216:in run_uglifyjs'
/usr/local/rvm/gems/ruby-2.3.4/gems/uglifier-4.1.4/lib/uglifier.rb:168:in compile'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/compressing.rb:65:in block in js_compressor='
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/legacy_proc_processor.rb:31:in call'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/processor_utils.rb:75:in call_processor'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/processor_utils.rb:57:in block in call_processors'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/processor_utils.rb:56:in reverse_each'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/processor_utils.rb:56:in call_processors'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/loader.rb:134:in load_from_unloaded'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/loader.rb:60:in block in load'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/loader.rb:317:in fetch_asset_from_dependency_cache'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/loader.rb:44:in load'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/cached_environment.rb:20:in block in initialize'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/cached_environment.rb:47:in load'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/base.rb:66:in find_asset'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/base.rb:73:in find_all_linked_assets'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/manifest.rb:142:in block in find'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/legacy.rb:114:in block (2 levels) in logical_paths'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/path_utils.rb:228:in block in stat_tree'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/path_utils.rb:212:in block in stat_directory'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/path_utils.rb:209:in each'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/path_utils.rb:209:in stat_directory'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/path_utils.rb:227:in stat_tree'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/legacy.rb:105:in each'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/legacy.rb:105:in block in logical_paths'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/legacy.rb:104:in each'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/legacy.rb:104:in logical_paths'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/manifest.rb:140:in find'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/sprockets/manifest.rb:185:in compile'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-rails-3.2.1/lib/sprockets/rails/task.rb:68:in block (3 levels) in define'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-3.7.1/lib/rake/sprocketstask.rb:147:in with_logger'
/usr/local/rvm/gems/ruby-2.3.4/gems/sprockets-rails-3.2.1/lib/sprockets/rails/task.rb:67:in block (2 levels) in define'
/usr/local/rvm/gems/ruby-2.3.4/gems/rake-12.3.0/exe/rake:27:in <top (required)>'
/usr/local/rvm/gems/ruby-2.3.4/bin/ruby_executable_hooks:15:in eval'
/usr/local/rvm/gems/ruby-2.3.4/bin/ruby_executable_hooks:15:in <main>'
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)

我究竟需要做什么来修复这个错误?

【问题讨论】:

  • 您可能需要完整的跟踪来追踪问题 - 请参阅当前问题底部的注释:See full trace by running task with --trace。尝试运行它,看看它是否指向错误,如果没有,请使用完整的跟踪更新问题,应该有人能够提供帮助:)

标签: ruby-on-rails ruby ruby-on-rails-4 rubygems uglifier


【解决方案1】:

我遇到了同样的错误。有趣的是,它是由 Rails 自己为 ActiveStorage 推荐的 direct_upload.js 文件触发的!我在这里找到了解决方案:https://github.com/lautis/uglifier/issues/127

尝试替换

config.assets.js_compressor = :uglifier

与

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

在config/environments/production.rb

【讨论】:

  • 谢谢!这会让我发疯。您对与 direct_upload.js 的关系的标注正是我的情况。
【解决方案2】:

跟踪表明您的 JavaScript 文件之一存在语法错误。如果您查看浏览器的控制台,它可能会告诉您错误在哪里。

如果没有,我建议删除 JS 文件,直到找到罪魁祸首,然后注释掉有问题的文件中的行,直到找到错误为止。二进制搜索方法可能会有所帮助;首先删除大约一半的 JS 文件,然后尝试预编译。如果错误仍然存​​在,则删除剩下的一半并重试。当错误停止发生时,您就知道哪一组文件包含有问题的文件,因此您可以备份一个步骤,删除除该组之外的所有内容,然后再次尝试重新编译。最终你应该找出哪个文件包含错误。

将其缩小到单个文件后,您可以通过注释掉文件中大约一半的行、重新编译等来使用相同的技术。

【讨论】:

  • 不幸的是,这对我来说是个问题。该错误未在浏览器中显示,因为损坏的文件不是该页面的一部分,因此我将其归咎于 Uglifier。之前的错误抱怨 ES6 语法,事后看来应该是语法错误。
【解决方案3】:

您始终可以通过使用 uglifier 编译器解析 JS 文件来检查它。 打开你的 Rails 控制台

const JS_FOLDER = [file1_path, file2_path];
JS_FOLDER.each do. |file_name|
  puts "#{file_name}"
  puts  Uglifier.compile(File.read(file_name))
end

你会得到你损坏的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2019-06-22
    相关资源
    最近更新 更多