7
votes

SyntaxError: Jeton inattendu 'const' (avec Vue, Karma, Webpack, Phantomjs)

J'ai une application plus ou moins vanilla laravel + vue.js et j'essaie de faire des JS Test avec Karma et Jasmine . Si j'essaie d'utiliser () => {} code> fonctions de style ou des mots-clés tels que const code> dans mes tests, ils échouent avec jeton inattendu forte> erreurs, cependant , Je n'ai pas de problème à l'aide du mot clé importer code> et je suis capable de transpirer et de travailler avec .vue code> fichiers sans problème.

une affirmation triviale comme p > xxx pré>

semble fonctionner correctement (voir la dernière ligne) p> xxx pré>

strong>, si j'ajoute un trivial const code> déclaration à ma fonction de test p> xxx pré>

i obtenir une erreur: p> xxx pré>

Au lieu de strong>, si j'essaie de causer une erreur de syntaxe p> xxx pré>

alors Babel se plaint (sur la première ligne, avant que le karma ou les bottes de Phantomjs up) p> xxx pré>

Cela semble impliquer que le fichier exemple.spec.js code> est analysé / transpilé par Babel, mais que la version transpilée n'est pas livrée au navigateur correctement, même si le fichier exemple.vue code> semble être livré correctement. p> que puis-je faire pour pouvoir obtenir des choses comme const code> et () => {} code> fonctionner dans mes tests? strong> Merci . P>

Voici les fichiers pertinents: p>

{
  "private": true,
  "scripts": {
    "prod": "gulp --production",
    "dev": "gulp watch"
  },
  "devDependencies": {
    "bootstrap-sass": "^3.3.7",
    "gulp": "^3.9.1",
    "jquery": "^3.1.0",
    "laravel-elixir": "^6.0.0-11",
    "laravel-elixir-vue-2": "^0.2.0",
    "laravel-elixir-webpack-official": "^1.0.2",
    "lodash": "^4.16.2",
    "vue": "^2.0.1",
    "vue-resource": "^1.0.3"
  },
  "dependencies": {
    "jasmine-core": "^2.5.2",
    "karma": "^1.3.0",
    "karma-babel-preprocessor": "^6.0.1",
    "karma-chrome-launcher": "^2.0.0",
    "karma-firefox-launcher": "^1.0.0",
    "karma-jasmine": "^1.0.2",
    "karma-phantomjs-launcher": "^1.0.2",
    "karma-webpack": "^1.8.0"
  }
}


4 commentaires

S'il vous plaît essayez de vous attendre (vrai) .to.equal (vrai);


Dans le DOCS KARMA-BABEL-PREPROCESSOR dit: "AS de Babel 6.0, vous Besoin de dire à Babel, qui fonctionnent à utiliser », je n'utilise pas Webpack, mais je ne vois pas que vous ne pouvez pas vous voir définir les préréglages nulle part dans le code que vous avez montré.


Comme Craig ait dit, Babel a des étapes différentes de la prise en charge ES6, essayez d'utiliser ES2015 + étage-3 dans votre .babelrc , cette combinaison transpile dans mon cas.


Merci pour les commentaires @CRAIG_H et PANJUNJIE. J'ai finalement pu créer une configuration de travail. Voir ma réponse pour plus de détails si vous êtes curieux.


3 Réponses :


4
votes

Les commentaires de @craig_h et @panjunjie m'ont mis sur la bonne voie de la recherche de la configuration de Karma-Babel-Préprocessor , qui m'a conduit à la configuration pour karma-webpack . Je ne suis toujours pas sûr de ce qui causait le problème initial, mais il semble que ma configuration WebPack pour le karma était incorrecte ou incomplète et manquait de silencieusement. J'ai ajouté babel-loader et babel-preset-es2015 paquets via xxx

, puis je ruie et nettoyé mon karma .conf.js comme tel: xxx

mon package.json ressemble maintenant à ceci: xxx

Avec tout cela, je peux maintenant utiliser tout le bonté ES2015 comme const et () => {} . Désolé de répondre à ma propre question, mais j'espère que cela aide quelqu'un d'autre qui rencontre un problème similaire.


1 commentaires

Vous pouvez toujours répondre à votre propre question! C'est un peu tard, mais je soupçonne que c'est parce que const est ES2015 et Phantomjs ne le supporte pas encore ( github.com/ariya/phantomjs/issues/14506 ). Babel a probablement compilé que le JavaScript plus compatible pour vous avant d'être exécuté par Phantomjs.



1
votes

J'ai eu un problème similaire (mais pas identique; votre configuration est assez spécifique). J'utilisais également Vue, Karma, Webpack et Phantomjs (tel que configuré dans le modèle VUE-WebPack).

Cependant, mon problème est que je définissais const dans un fichier d'assistance qui a été importé dans mon application. Quand j'ai changé const à var dans ce fichier, les tests ont pu exécuter. (Peu importait que const a été utilisé ou non dans d'autres fichiers déjà dans le répertoire src ).

Ce problème a été corrigé lorsque j'ai déplacé ce fichier d'aide dans mon dossier src ou l'un de ses sous-répertoires. Je suis trop novice pour savoir pourquoi cela a résolu le problème, mais je suppose que Babel n'était pas configuré pour travailler dans le dossier racine et que le dossier src .

Espérons que cela est utile pour les autres aussi.


0 commentaires

1
votes

En plus du commentaire de Ryanquey: il a raison. La configuration par défaut VUE + WebPack CLI n'inclut que certains contextes à traiter par le chargeur Babel-Charger. Recherchez dans la version / webpack.base.conf.js, puis à la règle du module pour les fichiers JS. Vous pouvez voir que seuls les chemins SRC, Test et Node_Modules / WebPack-Dev-Server / Client Server sont inclus (à l'heure de cette écriture).


0 commentaires