sni*_*tko 62 javascript git deployment ruby-on-rails execjs
部署我的Rails应用程序时,我收到以下错误:
rake aborted!
ExecJS::ProgramError: Unexpected token punc «(», expected punc «:» (line: 15, col: 14, pos: 265)
Error
at new JS_Parse_Error (/tmp/execjs20150524-4411-1p45n63js:2359:10623)
at js_error (/tmp/execjs20150524-4411-1p45n63js:2359:10842)
at croak (/tmp/execjs20150524-4411-1p45n63js:2359:19086)
at token_error (/tmp/execjs20150524-4411-1p45n63js:2359:19223)
at expect_token (/tmp/execjs20150524-4411-1p45n63js:2359:19446)
at expect (/tmp/execjs20150524-4411-1p45n63js:2359:19584)
at /tmp/execjs20150524-4411-1p45n63js:2359:28513
at /tmp/execjs20150524-4411-1p45n63js:2359:19957
at expr_atom (/tmp/execjs20150524-4411-1p45n63js:2359:27269)
at maybe_unary (/tmp/execjs20150524-4411-1p45n63js:2359:30019)new JS_Parse_Error ((execjs):2359:10623)
js_error ((execjs):2359:10842)
croak ((execjs):2359:19086)
token_error ((execjs):2359:19223)
expect_token ((execjs):2359:19446)
expect ((execjs):2359:19584)
(execjs):2359:28513
(execjs):2359:19957
expr_atom ((execjs):2359:27269)
maybe_unary ((execjs):2359:30019)
Run Code Online (Sandbox Code Playgroud)
有问题的文件是有效的,它适用于localhost.我也试过rake assests:precompile在localhost上运行,一切都通过了.最后,我试图从文件中删除内容,git push和redeploy - 仍然得到相同的错误.只有完全删除文件并重新部署帮助.
会欣赏任何想法.
Rad*_*zic 236
运行rails console和:
JS_PATH = "app/assets/javascripts/**/*.js";
Dir[JS_PATH].each do |file_name|
puts "\n#{file_name}"
puts Uglifier.compile(File.read(file_name), harmony: true)
end
Run Code Online (Sandbox Code Playgroud)
它将显示文件和Uglifier出现问题的行.
Mad*_*der 33
我怀疑,在那个js文件中,你有类似以下内容:
var User = {
getName() {
alert("my name");
}
}
Run Code Online (Sandbox Code Playgroud)
用正确的格式替换它,
var User = {
getName: function() {
alert("my name");
}
}
Run Code Online (Sandbox Code Playgroud)
为我工作.
错误显然是在说,它期待":"但它找到了"(".
刚遇到同样的问题.
我的情况是有人使用了自ES2015以来唯一支持的语法,例如
function someThing(param = true) {
// do something here
};
Run Code Online (Sandbox Code Playgroud)
虽然我们的环境不支持此功能.
而错误消息实际上是由Uglifer生成的.
我不确定你的构建链,但我通过将相同的错误消息粘贴到Google来到这里.
这在ES2015中被称为"速记属性".我正在使用Babel 6和Gulp,需要做一个npm install babel-plugin-transform-es2015-shorthand-properties --save-dev并将该转换添加到我的babel插件中.
.pipe(babel({
plugins: [
'transform-es2015-shorthand-properties'
]
}))
Run Code Online (Sandbox Code Playgroud)
如果由于库而不是代码中的问题,Radovan 的答案不适合您,您可以尝试升级 Uglifier 并启用 ES6 编译。
Gemfile.lock
gem 'uglifier', '~> 4.1'
Run Code Online (Sandbox Code Playgroud)
配置/环境/生产.rb
config.assets.js_compressor = Uglifier.new(harmony: true)
Run Code Online (Sandbox Code Playgroud)
2019 年 12 月答案:从版本 4.2.0(2019 年 9 月发布)开始,Uglifier 现在显示一个漂亮的(彩色的!)调试输出,向您显示有问题的代码行。
我遇到了Uglifier::Error: Unexpected character '“错误”,即使按照本页中的所有其他解决方案也找不到它。
因此,转到 Gemfile,并将 Uglifier 设置为至少 4.2:
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 4.2'
Run Code Online (Sandbox Code Playgroud)
运行bundle update uglifier以更新它。
然后看看输出,它会显示如下内容:
| 归档时间: |
|
| 查看次数: |
30604 次 |
| 最近记录: |