Wdrażam aplikację React, ale pojawia się dziwny błąd podczas odwiedzania strony przez https.
Gdy odwiedzam stronę przez https, pojawia się następujący błąd:
SecurityError: Nie udało się zbudować „WebSocket”: Niebezpieczne połączenie WebSocket może nie zostać zainicjowane ze strony załadowanej przez HTTPS.
Ale kiedy przechodzę do strony przez http, działa idealnie.
Problem polega na tym, że nie używam websockets, o ile wiem. Przeszukałem kod, aby sprawdzić, czy istnieje żądanie http, które powinno dotyczyć https lub ws: zamiast wss: ale nic nie widzę.
Czy ktoś już na to wpadł?
Dołączam kopię pliku package.json. Daj mi znać, jeśli potrzebujesz mnie do przesłania innych części kodu, aby pomóc w debugowaniu.
Z góry dziękuję.
{
"name": "client",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.3.2",
"@testing-library/user-event": "^7.1.2",
"baffle": "^0.3.6",
"cross-env": "^6.0.3",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-player": "^1.14.2",
"react-router-dom": "^5.1.2",
"react-scripts": "3.3.0",
"react-typist": "^2.0.5",
"webpack-hot-dev-clients": "^2.0.2"
},
"scripts": {
"start": "cross-env react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
node_modules
ręcznie gdyż nie będą zobowiązani do wspólnego repoWiele odpowiedzi tutaj faktycznie rozwiązać problem, ale najprostszy sposób znalazłem ponieważ poprosiłem to pytanie jest dodanie pakietu npm służyć do zależności.
yarn add serve
lubnpm i serve
a następnie zamień skrypt startowy na:
Jest to właściwie prosto z tworzenia reagują aplikacji Docs
źródło
"dev": "react scripts start"
Uruchomiłbyś, bynpm run dev
uruchomić lokalnie.Oto prostsze rozwiązanie. Downgrade
react-scripts
TO3.2.0
w twojejpackage.json
(mój był w3.3.0
).Być może trzeba będzie usunąć swoje
package-lock.json
inode_modules
(rm -rf package-lock.json node_modules
), a następnie zrobićnpm i
. Zaangażuj się zarówno w nowy, jakpackage.json
ipackage-lock.json
w repozytorium.źródło
Minęło trochę czasu, odkąd bawiłem się reakcją, ale
react-scripts
jeśli się nie mylę, jest on zbudowany na pakiecie webpack, więc najprawdopodobniej używa przyspieszenia rozwoju webpack-dev-server. Używa gniazd internetowych w celu komunikowania się z klientem w celu uruchomienia ponownego ładowania na gorąco, gdy wykryje zmiany na dysku.Prawdopodobnie dopiero uruchamiasz aplikację w trybie programistycznym, więc jeśli wdrażasz ją w środowisku produkcyjnym, powinieneś uruchomić,
npm run build
który utworzyłby zestaw plików javascript, które możesz obsłużyć na swoim ulubionym serwerze WWW.źródło
npm run build
i przesłać tylko zawartość zbuild
katalogu.NODE_ENV=production npm run build
, a następnie prześlij tylkobuild
katalog do heroku (to znaczy build będzie twoim webrootem na serwerze WWW, nie potrzebujesz węzła na serwerze, chyba że używasz ssr). Wersja produkcyjna nie powinna zawierać nawet serwera deweloperskiego webpack, powiedziałbym, że to błąd w tym przypadku.Dodaj ten kod do server.js
Do pliku pakage.json
I dodaj proxy proxy do /folder-name-react-app/pakage.json
źródło
każdy, kto zmaga się z tym problemem podczas wdrażania Heroku, obniża twój
reac-scripts
moduł do3.2.0
.package-lock.json
pliknode_modules
folderreact-scripts
wersję na3.2.0
npm install
wszystkie moduły ponownieźródło
Musisz spojrzeć na ten artykuł ze strony internetowej Create-React-App. Wyjaśnia, jak prawidłowo wdrożyć aplikację React utworzoną za pomocą aplikacji „Create-React-App”, która wskazuje konkretny buildpack dla aplikacji React, mars / create-reag-app-buildpack, w Github, którego potrzebowałeś podczas tworzenia aplikacji Heroku.
https://create-react-app.dev/docs/deployment/#heroku
https://github.com/mars/create-react-app-buildpack
Miałem ten sam problem z niepewnym problemem z gniazdem internetowym, który wszyscy tu mają, więc przetestowałem rozwiązanie z artykułu Create-React-App. To rozwiązało problem. Nie trzeba modyfikować node_module ani nic.
Wszystko, co musisz zrobić, to nam to polecenie, tworząc aplikację heroku z CLI w katalogu głównym aplikacji React:
następnie:
kiedy wejdziesz na swoją stronę w Heroku. będzie działać zgodnie z oczekiwaniami bez żadnego błędu „niezabezpieczonego gniazda sieciowego”.
(Nie wiem, jak dodać do niego pakiet budujący mars / create-reagować na aplikację PO tym, jak już utworzyłeś / wdrożyłeś w Heroku. Jeszcze tego nie zrobiłem).
Wydaje się, że powyższe rozwiązanie rozwiązuje problem, który zespół tworzenia aplikacji reaguje na wdrożenie w Heroku.
źródło