Die Lösungen, die in anderen verwandten Fragen angeboten werden, z. B. das Einfügen der richtigen Voreinstellungen (es2015) in .babelrc, sind bereits in meinem Projekt implementiert.
Ich habe zwei Projekte (nennen wir sie A und B), die beide die ES6-Modulsyntax verwenden. In Projekt A importiere ich Projekt B, das über npm installiert wird und sich im Ordner node_modules befindet. Wenn ich meine Testsuite für Projekt A ausführe, wird folgende Fehlermeldung angezeigt:
SyntaxError: Unerwarteter Token-Import
Dem geht diese angeblich fehlerhafte Codezeile aus Projekt B voraus:
(Funktion (exportiert, erfordert, Modul, __Dateiname, __Dirnname) {importiere createBrowserHistory aus 'history / lib / createBrowserHistory';
Das iife scheint etwas mit npm oder möglicherweise babel zu tun zu haben, da meine Quelldatei nur "import createBrowserHistory from 'history / lib / createBrowserHistory' enthält; Die Komponententests in der Testsuite von Projekt B laufen einwandfrei, und wenn ich Projekt B als Abhängigkeit von entferne Projekt A, meine Testsuite (die immer noch es6-Importe für interne Projektmodule verwendet) funktioniert dann einwandfrei.
Full Stack Trace:
SyntaxError: Unexpected token import
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:374:25)
at Module._extensions..js (module.js:405:10)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:138:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (actionCreators.js:4:17)
at Module._compile (module.js:398:26)
at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/ProjectA/src/components/core/wrapper/wrapper.js:28:23)
at Module._compile (module.js:398:26)
at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/ProjectA/src/components/core/wrapper/wrapperSpec.js:15:16)
at Module._compile (module.js:398:26)
at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at /ProjectA/node_modules/mocha/lib/mocha.js:219:27
at Array.forEach (native)
at Mocha.loadFiles (/ProjectA/node_modules/mocha/lib/mocha.js:216:14)
at Mocha.run (/ProjectA/node_modules/mocha/lib/mocha.js:468:10)
at Object.<anonymous> (/ProjectA/node_modules/mocha/bin/_mocha:403:18)
at Module._compile (module.js:398:26)
at Object.Module._extensions..js (module.js:405:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Function.Module.runMain (module.js:430:10)
at startup (node.js:141:18)
at node.js:980:3
Hier ist mein Testbefehl von package.json:
"test": "mocha --compilers js:babel-core/register '+(test|src)/**/*Spec.js'"
Dieser StackOverflow-Beitrag ist ähnlich, bietet jedoch keine Lösung für meine Verwendung der Befehlszeile: Importieren eines Moduls aus node_modules mit babel, aber fehlgeschlagen
--compilers
ist dies nicht erforderlich, --require babel-register
sollte stattdessen verwendet werden: "Wenn Ihre ES6-Module die Erweiterung .js haben, können Sie --save-dev babel-register npm installieren und mocha --require babel-register; --compiler verwenden ist nur erforderlich, wenn Sie eine Dateierweiterung angeben müssen. "
"babel":{"presets": ["es2015"]}
es war das Letzte, was mir fehlte!