J'ai un projet ApolloServer qui me pose problème, alors j'ai pensé que je pourrais le mettre à jour et j'ai rencontré des problèmes lors de l'utilisation du dernier Babel. Mon "index.js" est:
require('dotenv').config()
import {startServer} from './server'
startServer()
Et lorsque je l'exécute, j'obtiens l'erreur "SyntaxError: Impossible d'utiliser l'instruction d'importation en dehors d'un module". J'ai d'abord essayé de faire des choses pour convaincre TPTB * qu'il s'agissait d'un module (sans succès). J'ai donc changé le "import" en "besoin" et cela a fonctionné.
Mais maintenant, j'ai environ deux douzaines d '"importations" dans d'autres fichiers, ce qui me donne la même erreur.
* Je suis sûr que la racine de mon problème est que je ne suis même pas sûr de ce qui se plaint du problème. J'ai en quelque sorte supposé que c'était Babel 7 (puisque je viens de Babel 6 et j'ai dû changer les préréglages) mais je ne suis pas sûr à 100%.
La plupart de ce que j'ai trouvé pour les solutions ne semble pas s'appliquer au nœud droit. Comme celui-ci ici:
Importation du module ES6 donnant "SyntaxError non capturée: identifiant inattendu"
Dit qu'il a été résolu en ajoutant "type = module" mais cela irait généralement dans le HTML, dont je n'en ai pas. J'ai également essayé d'utiliser les anciens préréglages de mon projet:
"presets": ["es2015", "stage-2"],
"plugins": []
Mais cela m'obtient une autre erreur: "Erreur: les fichiers Plugin / Preset ne sont pas autorisés à exporter des objets, seulement des fonctions."
MISE À JOUR: Voici les dépendances avec lesquelles j'ai commencé:
"dependencies": {
"@babel/polyfill": "^7.6.0",
"apollo-link-error": "^1.1.12",
"apollo-link-http": "^1.5.16",
"apollo-server": "^2.9.6",
"babel-preset-es2015": "^6.24.1",
la source
jest.config.js
sur'ts-jest/presets/js-with-ts'
- a encore d'autres problèmes, mais cela a résolu le gros problème. ..... euh oui, mon problème était lié aux tests ... les versions normales étaientRéponses:
Mise à jour 2020 (noeud 13.2.0+)
Vérifiez que la dernière version de Node est installée. Le
--experimental-modules
drapeau n'est plus nécessaire. Effectuez simplement l' une des opérations suivantes :"type": "module"
au parent le plus prochepackage.json
. Avec cela, tous les fichiers.js
et.mjs
sont interprétés comme des modules ES. Vous pouvez interpréter des fichiers individuels comme CommonJS en utilisant l'.cjs
extension.OU
.mjs
extension. Tous les autres fichiers, tels que.js
seront interprétés comme CommonJS, qui est la valeur par défaut sitype
n'est pas défini danspackage.json
.la source
Selon le document officiel ( https://nodejs.org/api/esm.html#esm_code_import_code_statements ):
Pour que Node traite votre fichier comme un module ES, vous devez ( https://nodejs.org/api/esm.html#esm_enabling ):
la source
J'ai eu le même problème et ce qui suit l'a corrigé (en utilisant le noeud 12.13.1):
plus d'informations: https://nodejs.org/api/esm.html
la source
J'ai eu ce problème dans un nouveau projet d'API Express.
Le code du serveur incriminé dans
src/server/server.js
:Voici mes dépendances:
Et voici le coureur qui a jeté l'erreur:
C'était frustrant, car j'avais un projet Express similaire qui fonctionnait bien.
La solution était tout d'abord d'ajouter cette dépendance:
Et puis pour le câbler en utilisant un
babel.config.js
dans la racine du projet:Je ne comprends pas vraiment pourquoi cela fonctionne, mais je l'ai copié à partir d' une source faisant autorité , donc je suis heureux de m'en tenir à cela.
la source
:-)
la source
Ma solution était d'inclure le chemin babel-node lors de l'exécution de nodemon comme suit:
vous pouvez ajouter dans votre script package.json comme:
REMARQUE: mon fichier d'entrée est index.js, remplacez-le par votre fichier d'entrée (beaucoup ont app.js / server.js).
la source