Tengo un proyecto ApolloServer que me está causando problemas, así que pensé que podría actualizarlo y me encontré con problemas al usar el último Babel. Mi "index.js" es:
require('dotenv').config()
import {startServer} from './server'
startServer()
Y cuando lo ejecuto me sale el error "SyntaxError: No se puede usar la declaración de importación fuera de un módulo". Primero intenté hacer cosas para convencer a TPTB * de que este era un módulo (sin éxito). Así que cambié la "importación" a "requerir" y esto funcionó.
Pero ahora tengo alrededor de dos docenas de "importaciones" en otros archivos que me dan el mismo error.
* Estoy seguro de que la raíz de mi problema es que ni siquiera estoy seguro de qué se está quejando del problema. Asumí que era Babel 7 (ya que vengo de Babel 6 y tuve que cambiar los ajustes preestablecidos), pero no estoy 100% seguro.
La mayor parte de lo que he encontrado para soluciones no parece aplicarse al Nodo directo. Como este aquí:
Importación del módulo ES6 dando "Error de sintaxis no detectado: identificador inesperado"
Dice que se resolvió agregando "type = module" pero esto normalmente iría en el HTML, del cual no tengo ninguno. También he intentado usar los preajustes antiguos de mi proyecto:
"presets": ["es2015", "stage-2"],
"plugins": []
Pero eso me da otro error: "Error: los archivos de Plugin / Preset no pueden exportar objetos, solo funciones".
ACTUALIZACIÓN: Aquí están las dependencias con las que comencé:
"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",
fuente
jest.config.js
que'ts-jest/presets/js-with-ts'
- todavía tiene algunas otras cuestiones que se resolvió el grande. ..... uh sí, mi problema estaba probando relacionado ... lo normal builds estaban bienRespuestas:
Actualización 2020 (Nodo 13.2.0+)
Verifique que tenga instalada la última versión de Node. La
--experimental-modules
bandera ya no es necesaria. Simplemente realice una de las siguientes acciones :"type": "module"
al padre más cercanopackage.json
. Con esto, todos.js
y los.mjs
archivos se interpretan como módulos ES. Puede interpretar archivos individuales como CommonJS utilizando la.cjs
extensión.O
.mjs
extensión. Todos los demás archivos, como.js
se interpretarán como CommonJS, que es el predeterminado sitype
no está definido enpackage.json
.fuente
Según el documento oficial ( https://nodejs.org/api/esm.html#esm_code_import_code_statements ):
Para que Node trate su archivo como un módulo ES, debe ( https://nodejs.org/api/esm.html#esm_enabling ):
fuente
Tuve el mismo problema y lo siguiente lo solucionó (usando el nodo 12.13.1):
Más información: https://nodejs.org/api/esm.html
fuente
Tuve este problema en un proyecto incipiente de API Express.
El código del servidor infractor en
src/server/server.js
:Aquí estaban mis dependencias:
Y aquí estaba el corredor que arrojó el error:
Esto fue frustrante, ya que tenía un proyecto Express similar que funcionó bien.
La solución fue en primer lugar agregar esta dependencia:
Y luego para conectarlo usando a
babel.config.js
en la raíz del proyecto:No entiendo completamente por qué esto funciona, pero lo copié de una fuente autorizada , así que estoy feliz de seguir con eso.
fuente
:-)
fuente
Mi solución fue incluir la ruta del nodo babel mientras ejecuta nodemon de la siguiente manera:
puede agregar en su script package.json como:
NOTA: Mi archivo de entrada es index.js, reemplácelo con su archivo de entrada (muchos tienen app.js / server.js).
fuente