Pracuję z node.js, aw jednym z moich plików js używam const
w "strict mode"
. Podczas próby uruchomienia pojawia się błąd:
SyntaxError: Use of const in strict mode.
Jaka jest najlepsza praktyka?
Edytować:
'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
javascript
node.js
Vivek P.
źródło
źródło
var
. Dodaj semikolon'use strict';
Odpowiedzi:
Symbole
const
ilet
są częścią ECMAScript 2015 (alias ES6 i Harmony) i nie były domyślnie włączone w Node.js 0.10 lub 0.12. Od wersji Node.js 4.x „Wszystkie funkcje wysyłki [ES2015], które V8 uważa za stabilne, są domyślnie włączone w Node.js i NIE wymagają żadnych flag wykonawczych.”. Dokumenty Node.js zawierają przegląd tego, które funkcje ES2015 są domyślnie włączone, a które wymagają flagi wykonawczej . Tak więc poprzez aktualizację do Node.js 4.x lub nowszej błąd powinien zniknąć.Aby włączyć niektóre funkcje ECMAScript 2015 (w tym
const
ilet
) w Node.js 0.10 i 0.12; uruchom program węzła z flagą harmonii, w przeciwnym razie pojawi się błąd składni. Na przykład:Wszystko zależy od tego, po której stronie znajduje się twój ścisły js. Polecam użycie trybu ścisłego z
const
deklaracjami po stronie serwera i uruchomienie serwera z flagą harmonii. Po stronie klienta należy użyć Babel lub podobnego narzędzia do konwersji ES2015 na ES5, ponieważ nie wszystkie przeglądarki klienta obsługująconst
deklaracje.źródło
'use strict';
siebie, ale pozwól, aby kod innej firmy sam decydował.Jeśli dzieje się tak w nodejs, jest to spowodowane starszą wersją nodejs. Zaktualizuj węzeł za pomocą,
1) Wyczyść pamięć podręczną NPM:
2) Zainstaluj małego pomocnika o nazwie „n”
3) Zainstaluj najnowszą stabilną wersję NodeJS
Zaktualizuj instrukcje nodejs zaczerpnięte z: https://stackoverflow.com/a/19584407/698072
źródło
node
wersję. Na przykład w momencie pisania tego tekstusudo n 6.9.4
zainstaluje najnowszy LTS, gdziesudo n stable
zostanie zainstalowany7.4.0
. Oczywiście jest to przełomowa zmiana, więc zachowaj ostrożnośćn stable
. Alternatywniesudo n lts
instaluje najnowszy LTS.Zwykle ten błąd występuje, gdy wersja węzła, dla którego wykonywany jest kod, jest starsza niż oczekiwano. (tj. 0,12 lub starszy).
jeśli używasz NVM, upewnij się, że masz odpowiednią wersję używanego węzła. Możesz sprawdzić zgodność na node.green pod kątem const w trybie ścisłym
Znalazłem podobny problem w innym poście i szczegółowo zamieściłem tam swoją odpowiedź
źródło
/usr/bin/node
folder, który miał 0.10.46.Jednym ważnym krokiem po aktualizacji węzła jest połączenie pliku binarnego węzła z najnowszą zainstalowaną wersją węzła
źródło
which node
node --version
wypisuje numer wersji, np.v0.10.29
Prawdopodobnie nie jest to rozwiązanie dla wszystkich, ale było dla mnie.
Jeśli używasz NVM, być może nie włączyłeś odpowiedniej wersji węzła dla uruchomionego kodu. Po ponownym uruchomieniu domyślna wersja węzła zmienia się z powrotem w systemową.
Wpadałem na to podczas pracy z React-Native, które działało dobrze. Wystarczy użyć nvm, aby użyć właściwej wersji węzła, aby rozwiązać ten problem.
źródło
nvm use version-number-you-need
to wszystko co musisz zrobić.Od czasu zadania pytania wersja robocza
const
słowa kluczowego jest już standardem życia w ramach ECMAScript 2015 . Również bieżąca wersja Node.js obsługuje deklaracje const bez--harmony
flagi.Mając powyższe, możesz teraz uruchomić
node app.js
, używającapp.js
:uzyskanie zarówno cukru składniowego, jak i zalet trybu ścisłego.
źródło
MB
to potęga dziesięciu, podczas gdy mebibajtMiB
to potęga dwóch. tj .1MB = 1e6
i1MiB = 1024 * 1024
. Zobacz wikipedia: MebibyteMiałem ostatnio podobny problem i skończyłem na tym pytaniu. To nie jest rozwiązanie, którego szukał PO, ale może pomóc innym z podobnym problemem.
Używam PM2 do uruchomienia projektu i na danym serwerze pomostowym miałem naprawdę starą wersję Node, NPM i PM2. Zaktualizowałem wszystko, jednak nadal utrzymywałem ten sam błąd:
Kilka razy próbowałem zatrzymać i uruchomić aplikację. Próbowałem także zaktualizować wszystko ponownie. Nic nie działało. Aż zauważyłem ostrzeżenie, gdy biegłem
pm2 start
:Gotcha! Po uruchomieniu w
pm2 update
końcu udało mi się uruchomić aplikację zgodnie z oczekiwaniami. Nie ma już błędów „const w trybie ścisłym”.źródło
const nie jest obsługiwany przez ECMAScript. Po określeniu trybu ścisłego pojawia się błąd składniowy. Musisz użyć var zamiast const, jeśli chcesz, aby kod był zgodny ze wszystkimi przeglądarkami. Wiem, że nie jest to idealne rozwiązanie, ale takie jest. Istnieją sposoby na tworzenie właściwości tylko do odczytu w JavaScript (patrz Czy właściwości tylko do odczytu można zaimplementować w czystym JavaScript? ), Ale myślę, że może to być nadmierne wykorzystanie w zależności od twojego scenariusza.
Poniżej znajduje się informacja o zgodności przeglądarki z MDN :
Kompatybilność z przeglądarkami
źródło
const
jest obsługiwany w ECMAScript 6 i jest szeroko obsługiwany: kangax.github.io/compat-table/es6/#const Ale masz rację w swojej odpowiedzi -'use strict';
iconst
nie miesza się.const
jest ponownie deklarowalny w Safari 7, ale nie w Opera 21, Chrome 35 i Firefox 29.Korzystanie z
const
trybu ścisłego jest dostępne wraz z wydaniem Chrome 41. Obecnie Chrome 41 Beta jest już wydany i obsługuje go.źródło
źródło
npm install -g nave; nave use 6.11.1
+1