Lors du déploiement de mon Rails, le message d'erreur suivant s'affiche:
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, cela 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 redéployer - j'ai toujours la même erreur. Seulement supprimer complètement le fichier et redéployer les aides.
J'apprécierais toutes les idées.
Ici, j'ai trouvé de l'aide pour le même problème que vous avez eu.
Exécuter Rails console 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 crée le problème.
Je soupçonne que, dans ce fichier js, vous avez quelque chose comme:
var User = {
getName() {
alert("my name");
}
}
Le remplacer par le bon format,
var User = {
getName: function() {
alert("my name");
}
}
a travaillé pour moi.
Erreur dit clairement, il s’attend à ":" mais il a trouvé "(".
Je ne suis pas sûr de votre chaîne de génération, mais je suis arrivé ici en collant le même message d'erreur dans Google.
Cela s'appelle "propriétés abrégées" dans ES2015. J'utilise Babel 6 avec Gulp et je devais faire un npm install babel-plugin-transform-es2015-shorthand-properties --save-dev
et ajoutez cette transformation à mes plugins Babel.
.pipe(babel({
plugins: [
'transform-es2015-shorthand-properties'
]
}))
Juste rencontrer le même problème.
Mon cas est une syntaxe utilisée par quelqu'un qui n'est supportée que depuis ES2015, ex
function someThing(param = true) {
// do something here
};
alors que cela n’est pas pris en charge dans notre environnement.
Et les messages d'erreur sont en réalité générés par Uglifer.
Je pourrais utiliser https://skalman.github.io/UglifyJS-online/ pour identifier le numéro de ligne correct où se trouvait le problème. Heureusement, au moins le fichier correct qui avait un problème a été signalé par grunt uglify
Dans mon cas, le problème avec la définition de fonction comme,
function someFunctionName(param1, param2=defaultValue){
//code
}
En raison de la définition de la fonction ci-dessus, je recevais une erreur, car elle n'est pas prise en charge par Uglifier. Les paramètres par défaut sont les spécifications de langage ES6/ES2015.
Pour résoudre le problème ci-dessus, vous pouvez vous référer à Définir une valeur de paramètre par défaut pour une fonction JavaScript
Si la réponse de Radovan ne fonctionne pas pour vous en raison d'un problème dans une bibliothèque plutôt que de votre code, vous pouvez essayer de mettre à niveau Uglifier et d'activer la compilation ES6.
Gemfile.lock
gem 'uglifier', '~> 4.1'
config/environnements/production.rb
config.assets.js_compressor = Uglifier.new(harmony: true)
Comme la trace ne fournit pas d'informations sur le fichier corrompu, le meilleur moyen d'identifier l'erreur est d'utiliser git bisect.
Il vous permet de trouver le commit qui introduit un bogue.
Supposons que vous soyez maître, vous commencez d'abord par créer une bissectrice:
$ git bisect start
$ git bisect bad
Ensuite, vous revenez à une précédente révision de travail, supposons 20 ans auparavant.
$ 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 passera à une autre révision, vous exécuterez à nouveau la même commande (assets: precompile) et une basse sur la sortie la marquera comme bonne/mauvaise.
En moins d'une minute, vous devriez être capable de trouver quel est le commit qui a introduit le problème.