ExecJS :: ProgramError: 意外的标记符号:name(option)

9

我的应用在本地环境中运行良好。我尝试将构建推送到Heroku,我的命令如下:

git push
bundle install
git add .
git commit -am "abcdef"
git push heroku master

我遇到了一个与 assets:precompile 相关的问题。
remote: -----> Preparing app for Rails asset pipeline
remote:        Running: rake assets:precompile
remote:        I, [2016-01-04T08:32:35.471098 #1018]  INFO -- : Writing /tmp/build_5d68c6d2f7845ca719a5f77705a12798/public/assets/recruiters-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.js
remote:        I, [2016-01-04T08:32:35.471825 #1018]  INFO -- : Writing /tmp/build_5d68c6d2f7845ca719a5f77705a12798/public/assets/recruiters-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.js.gz
remote:        I, [2016-01-04T08:32:35.477826 #1018]  INFO -- : Writing /tmp/build_5d68c6d2f7845ca719a5f77705a12798/public/assets/recruiters-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css
remote:        I, [2016-01-04T08:32:35.477974 #1018]  INFO -- : Writing /tmp/build_5d68c6d2f7845ca719a5f77705a12798/public/assets/recruiters-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz
remote:        I, [2016-01-04T08:32:35.575303 #1018]  INFO -- : Writing /tmp/build_5d68c6d2f7845ca719a5f77705a12798/public/assets/events-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.js
remote:        I, [2016-01-04T08:32:35.575465 #1018]  INFO -- : Writing /tmp/build_5d68c6d2f7845ca719a5f77705a12798/public/assets/events-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.js.gz
remote:        I, [2016-01-04T08:32:35.623887 #1018]  INFO -- : Writing /tmp/build_5d68c6d2f7845ca719a5f77705a12798/public/assets/events-31e95c603f03e300e73e01cd6ee747799da57b4d12924aa979e0fa0749681cca.css
remote:        I, [2016-01-04T08:32:35.624406 #1018]  INFO -- : Writing /tmp/build_5d68c6d2f7845ca719a5f77705a12798/public/assets/events-31e95c603f03e300e73e01cd6ee747799da57b4d12924aa979e0fa0749681cca.css.gz
remote:        rake aborted!
remote:        ExecJS::ProgramError: Unexpected token: name (option) (line: 242, col: 14, pos: 7159)
remote:        Error
remote:        at new JS_Parse_Error (/tmp/execjs20160104-1018-1ens1gjjs:2659:11936)
remote:        at js_error (/tmp/execjs20160104-1018-1ens1gjjs:2659:12155)
remote:        at croak (/tmp/execjs20160104-1018-1ens1gjjs:2659:20622)
remote:        at token_error (/tmp/execjs20160104-1018-1ens1gjjs:2659:20759)
remote:        at unexpected (/tmp/execjs20160104-1018-1ens1gjjs:2659:20847)
remote:        at semicolon (/tmp/execjs20160104-1018-1ens1gjjs:2659:21320)
remote:        at simple_statement (/tmp/execjs20160104-1018-1ens1gjjs:2659:24179)
remote:        at /tmp/execjs20160104-1018-1ens1gjjs:2659:22152
remote:        at /tmp/execjs20160104-1018-1ens1gjjs:2659:21493
remote:        at block_ (/tmp/execjs20160104-1018-1ens1gjjs:2659:26198)new JS_Parse_Error ((execjs):2659:11936)
remote:        js_error ((execjs):2659:12155)
remote:        croak ((execjs):2659:20622)
remote:        token_error ((execjs):2659:20759)
remote:        unexpected ((execjs):2659:20847)
remote:        semicolon ((execjs):2659:21320)
remote:        simple_statement ((execjs):2659:24179)
remote:        (execjs):2659:22152
remote:        (execjs):2659:21493
remote:        block_ ((execjs):2659:26198)

请注意,我已经编译了特定于控制器的资源(请参见下文)。我想知道是否会导致问题。
视图/布局/应用程序.html.erb
<%= stylesheet_link_tag "application", params[:controller], :media => "all", 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track' => true %>

initializers/assets.rb

# Compile controller assets
%w( recruiters events forms candidates ).each do |controller|
  Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end

有什么想法或建议吗?

更新 我找到了问题所在。虽然我不确定出了什么问题,也不知道为什么本地工作正常。

 238        if (fieldClass.match(/(select|checkbox-group|radio-group)/)) {
 239          previewData.values = [];
 240  
 241          $('.sortable-options li', field).each(function() {
 242            let option = {};
      ==============^
      SyntaxError: missing ; before statement
 243            option.selected = $('.select-option', $(this)).is(':checked');
 244            option.value = $('.option-value', $(this)).val();
 245            option.label = $('.option-label', $(this)).val();
 246  
 247            previewData.values.push(option);
 248          });
 249        }

语法错误


由于以下代码,出现了类似的错误: debugger var conversion = {};debugger 后面没有分号,尽管有一个新行。 - Kazim Zaidi
3个回答

21

通过更新js语法,我成功解决了问题,并且资产预编译成功。

let option = {};

已更新

var option = {};

1
这是为什么呢?因为原始的JS是有效的。 - sandre89
1
let 是 ES6 语法。 - Piers C

1

在将代码库升级到Rails 7时,我遇到了类似的情况。你可以通过harmony添加ES6支持,该方法利用浏览器中的ES6支持并通常使JS文件更小。只需要添加:

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

请添加至您的config/environments/production.rb文件中


-1
在我的情况下,资产编译在生产环境中成功了,但在暂存环境中出现了上述错误。因此,我检查了生产环境和暂存环境中的nodejs版本。在生产环境中,它是v12.10.0,在暂存环境中,它是v10.XX.XX。所以我将暂存环境中的nodejs版本更新为v12.10.0,现在它可以正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接