ExecJS:: ProgramError: Unexpected token punc " ( ", expected punc": "lors de l'exécution de rake assets: précompile on production
lors du déploiement de mon application Rails j'obtiens l'erreur suivante:
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)
Le fichier en question est valide, il fonctionne sur localhost. J'ai aussi essayé de courir rake assests:precompile
sur localhost, tout passe. Enfin, j'ai essayé de supprimer le contenu du fichier, git push et de redéployer - j'ai toujours eu la même erreur. Uniquement supprimer complètement le fichier et re-déployer les aides.
apprécierait toutes les idées.
7 réponses
Ici, j'ai trouvé de l'aide pour le même problème que vous.
console de rails de roulement et:
JS_PATH = "app/assets/javascripts/**/*.js";
Dir[JS_PATH].each do |file_name|
puts "\n#{file_name}"
puts Uglifier.compile(File.read(file_name))
end
il vous montrera le fichier et la ligne où L'Uglifier fait le problème.
je soupçonne, dans ce fichier js, que vous avez quelque chose comme ce qui suit:
var User = {
getName() {
alert("my name");
}
}
en le remplaçant par le bon format,
var User = {
getName: function() {
alert("my name");
}
}
travaillait pour moi.
Erreur est dit clairement, il s'attend à ":" mais il a trouvé "(".
Je ne suis pas sûr de votre chaîne de compilation, mais je suis arrivé ici en collant le même message d'erreur dans Google.
qui est appelé "propriétés sténographiques" dans ES2015. J'utilise Babel 6 avec Gulp et j'avais besoin de faire un npm install babel-plugin-transform-es2015-shorthand-properties --save-dev
et d'ajouter cette transformation à mes plugins babel.
.pipe(babel({
plugins: [
'transform-es2015-shorthand-properties'
]
}))
rencontre juste le même problème.
mon cas est quelqu'un syntaxe utilisé qui est seulement le soutien depuis ES2015, ex
function someThing(param = true) {
// do something here
};
bien que cela ne soit pas pris en charge dans notre environnement.
et les messages d'erreur sont en fait générés par Uglifer.
je pourrais utiliser https://skalman.github.io/UglifyJS-online / pour identifier le bon numéro de ligne où se trouvait le problème. Heureusement, au moins le bon fichier qui avait un problème a été souligné par Grunt uglify
dans mon cas problème avec la définition de la fonction comme,
function someFunctionName(param1, param2=defaultValue){
//code
}
en raison de la définition de la fonction ci-dessus je recevais erreur, car il n'est pas supporté par Uglifier. Les paramètres par défaut sont la spécification de langue ES6/ES2015.
pour la solution au problème ci-dessus, vous pouvez vous référer à définir une valeur de paramètre par défaut pour une fonction JavaScript
comme le backtrace ne fournit pas d'informations sur le fichier corrompu, pour moi la meilleure façon d'identifier l'erreur est d'utiliser git bisect.
il vous permet de trouver la propagation qui introduit un bug.
supposons que vous êtes sur master, d'abord vous commencez git bisect:
$ git bisect start
$ git bisect bad
ensuite, vous revenez à une révision précédente, en cours, supposons qu'il y a 20 révisions.
$ git checkout HEAD~20
vous exécutez la même commande
$ RAILS_ENV=production rake assets:precompile
si cela fonctionne, vous marquez la révision comme bonne:
$ git bisect good.
git va passer à une autre révision, vous exécutez à nouveau la même commande (assets:précompile) et bassed sur le point de sortie qu'il est bon / mauvais.
en moins d'une minute Vous devriez être en mesure de trouver quel est le commit qui a introduit la question.