Eu tenho um projeto ApolloServer que está me dando problemas, então pensei em atualizá-lo e ter problemas ao usar o Babel mais recente. Meu "index.js" é:
require('dotenv').config()
import {startServer} from './server'
startServer()
E quando o executo, recebo o erro "SyntaxError: Não é possível usar a declaração de importação fora de um módulo". Primeiro, tentei fazer as coisas para convencer o TPTB * de que este era um módulo (sem sucesso). Então eu mudei a "importação" para uma "exigência" e isso funcionou.
Mas agora tenho cerca de duas dúzias de "importações" em outros arquivos, dando-me o mesmo erro.
* Tenho certeza que a raiz do meu problema é que nem tenho certeza do que está reclamando sobre o problema. Eu meio que presumi que fosse o Babel 7 (já que eu sou do Babel 6 e precisei alterar as predefinições), mas não tenho 100% de certeza.
A maior parte do que encontrei para soluções não parece se aplicar ao Node direto. Como este aqui:
Importação do módulo ES6 fornecendo "Untaught SyntaxError: identificador inesperado"
Diz que foi resolvido adicionando "type = module", mas isso normalmente ocorre no HTML, do qual não tenho nenhum. Também tentei usar as predefinições antigas do meu projeto:
"presets": ["es2015", "stage-2"],
"plugins": []
Mas isso me dá outro erro: "Erro: arquivos de plug-in / predefinidos não podem exportar objetos, apenas funções".
UPDATE: Aqui estão as dependências com as quais eu comecei:
"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",
fonte
jest.config.js
para'ts-jest/presets/js-with-ts'
- ainda tem alguns outros problemas, mas isso resolveu o grande problema. ..... uh sim, o meu problema estava testando relacionados ... o normal de construções eram muito bemRespostas:
Atualização 2020 (nó 13.2.0 ou posterior)
Verifique se você tem a versão mais recente do Node instalada. A
--experimental-modules
bandeira não é mais necessária. Simplesmente siga um destes procedimentos :"type": "module"
ao pai mais próximopackage.json
. Com isso, todos os arquivos.js
e.mjs
são interpretados como módulos ES. Você pode interpretar arquivos individuais como CommonJS usando a.cjs
extensãoOU
.mjs
extensão. Todos os outros arquivos, como.js
serão interpretados como CommonJS, que é o padrão setype
não estiver definido empackage.json
.fonte
De acordo com o documento oficial ( https://nodejs.org/api/esm.html#esm_code_import_code_statements ):
Para fazer o Node tratar seu arquivo como um módulo ES, você precisa ( https://nodejs.org/api/esm.html#esm_enabling ):
fonte
Eu tive o mesmo problema e o seguinte foi corrigido (usando o nó 12.13.1):
mais informações: https://nodejs.org/api/esm.html
fonte
Eu tive esse problema em um projeto de API Express iniciante.
O código do servidor incorreto em
src/server/server.js
:Aqui estavam minhas dependências:
E aqui estava o corredor que lançou o erro:
Isso foi frustrante, pois eu tinha um projeto Express semelhante que funcionou bem.
A solução foi primeiramente adicionar esta dependência:
E então conectá-lo usando um
babel.config.js
na raiz do projeto:Não entendo muito bem por que isso funciona, mas copiei de uma fonte autorizada , por isso estou feliz em continuar.
fonte
:-)
fonte
Minha solução foi incluir o caminho do nó babel ao executar o nodemon da seguinte maneira:
você pode adicionar seu script package.json como:
NOTA: Meu arquivo de entrada é index.js, substitua-o pelo seu arquivo de entrada (muitos têm app.js / server.js).
fonte