Mam projekt ApolloServer, który sprawia mi problemy, więc pomyślałem, że mogę go zaktualizować i napotkałem problemy podczas korzystania z najnowszej wersji Babel. Mój „index.js” to:
require('dotenv').config()
import {startServer} from './server'
startServer()
Po uruchomieniu pojawia się błąd „Błąd składni: nie można użyć instrukcji importu poza modułem”. Najpierw próbowałem zrobić rzeczy, aby przekonać TPTB *, że był to moduł (bez powodzenia). Więc zmieniłem „import” na „wymaganie” i to zadziałało.
Ale teraz mam około dwóch tuzinów „importów” w innych plikach, co daje mi ten sam błąd.
* Jestem pewien, że źródłem mojego problemu jest to, że nie jestem nawet pewien, co narzeka na ten problem. Przyjąłem, że to Babel 7 (ponieważ pochodzę z Babel 6 i musiałem zmienić ustawienia wstępne), ale nie jestem w 100% pewien.
Większość tego, co znalazłem dla rozwiązań, nie dotyczy prostego węzła. Jak ten tutaj:
Moduł ES6 Import podający „Nieprzechwycony błąd składni: nieoczekiwany identyfikator”
Mówi, że problem został rozwiązany przez dodanie „type = module”, ale zwykle będzie to przebiegać w HTML, którego nie mam. Próbowałem też użyć starych ustawień mojego projektu:
"presets": ["es2015", "stage-2"],
"plugins": []
Ale pojawia się kolejny błąd: „Błąd: Pliki wtyczek / ustawień wstępnych nie mogą eksportować obiektów, tylko funkcje.”
AKTUALIZACJA: Oto zależności, od których zacząłem:
"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",
źródło
jest.config.js
celu'ts-jest/presets/js-with-ts'
- jeszcze kilka innych kwestii, ale to rozwiązano duże. ..... tak, mój problem był związany z testowaniem ... normalne kompilacje były w porządkuOdpowiedzi:
Aktualizacja 2020 (węzeł 13.2.0+)
Sprawdź, czy masz zainstalowaną najnowszą wersję węzła.
--experimental-modules
Flaga nie jest już konieczne. Po prostu wykonaj jedną z następujących czynności :"type": "module"
do najbliższego rodzicapackage.json
. Z tym wszystkim.js
, a.mjs
pliki są interpretowane jako moduły ES. Możesz interpretować pojedyncze pliki jako CommonJS, używając.cjs
rozszerzenia.LUB
.mjs
rozszerzeniem. Wszystkie inne pliki, takie jak.js
będą interpretowane jako CommonJS, który jest domyślny, jeślitype
nie jest zdefiniowany wpackage.json
.źródło
Według oficjalnego dokumentu ( https://nodejs.org/api/esm.html#esm_code_import_code_statements ):
Aby Node traktował twój plik jako moduł ES, musisz ( https://nodejs.org/api/esm.html#esm_enabling ):
źródło
Miałem ten sam problem i następujące problemy go rozwiązały (za pomocą węzła 12.13.1):
więcej informacji: https://nodejs.org/api/esm.html
źródło
Miałem ten problem w nowo powstałym projekcie Express API.
Obraźliwy kod serwera w
src/server/server.js
:Oto moje zależności:
A oto biegacz, który rzucił błąd:
To było frustrujące, ponieważ miałem podobny projekt Express, który działał dobrze.
Rozwiązaniem było po pierwsze dodanie tej zależności:
A następnie połączyć go za pomocą
babel.config.js
w katalogu głównym projektu:Nie do końca rozumiem, dlaczego to działa, ale skopiowałem to z wiarygodnego źródła , więc chętnie się z tym trzymam.
źródło
źródło
Moim rozwiązaniem było włączenie ścieżki babel-node podczas uruchamiania nodemona w następujący sposób:
możesz dodać w skrypcie package.json jako:
UWAGA: Mój plik wejściowy to index.js zastąp go plikiem wejściowym (wiele z nich ma app.js / server.js).
źródło