2013-07-30 19 views
9

Próbuję zarządzać zależnościami mojego pakietu węzłów. Chciałbym móc zainstalować wszystkie wymagane zależności, uruchamiając polecenie, a z tego, co przeczytałem, jednym ze sposobów osiągnięcia tego jest użycie pliku package.json i uruchomienie npm install. Więc mój plik JSON wygląda następująco:instalacji npm nie można odczytać package.json

{ 
"name": "Name-Of-The-Thing", 
"description": "The Thing's Name", 
"author": "The Dude <[email protected]>", 
"dependencies": { 
     "mocha":">= 1.12.0", 
     "mocha-phantomjs":">= 3.1.0", 
     "chai":">= 1.7.2", 
     "phantomjs":">= 1.9.1" 
} 
} 

Jednak npm install raporty następujący błąd:

npm ERR! Failed to parse json 
npm ERR! Unexpected token ? 
npm ERR! File: C:\Path\To\The\Thing\package.json 
npm ERR! Failed to parse package.json data. 
npm ERR! package.json must be actual JSON, not just JavaScript. 
npm ERR! 
npm ERR! This is not a bug in npm. 
npm ERR! Tell the package author to fix their package.json file. JSON.parse 

npm ERR! System Windows_NT 6.2.9200 
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "test" 
npm ERR! cwd C:\Path\To\The\Thing 
npm ERR! node -v v0.8.15 
npm ERR! npm -v 1.1.66 
npm ERR! file C:\Path\To\The\Thing\package.json 
npm ERR! code EJSONPARSE 
npm ERR! 
npm ERR! Additional logging details can be found in: 
npm ERR!  C:\Path\To\The\Thing\npm-debug.log 
npm ERR! not ok code 0 

Ktoś wie dlaczego?

+0

Ten konkretny pakiet.json działa dobrze dla mnie. –

+0

@MerynStol to niesamowite. Cieszę się, że to naprawdę takie proste. Może to problem z platformą. Używam tego polecenia w systemie Windows 8 i architekturze 64-bitowej – Ceilingfish

+1

Biorąc pod uwagę "Nieoczekiwany token?" błąd, być może w pliku json jest jakaś dziwna (niewidzialna) postać. Może spróbuj użyć innego edytora tekstu lub skrzypca z ustawieniami swojego edytora. Następnie ponownie zapisz plik package.json. Używałbym wszędzie UTF-8. –

Odpowiedz

13

Prawidłowa odpowiedź:

edytorze dodaje kolejności bajtów znak do pliku JSON, co sprawia, że ​​oktet strumień niepoprawny tekst JSON.

JSON RFC mówi:

JSON text SHALL be encoded in Unicode. The default encoding is UTF-8.

Since the first two characters of a JSON text will always be ASCII characters [RFC0020], it is possible to determine whether an octet stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking at the pattern of nulls in the first four octets.

 00 00 00 xx UTF-32BE 
     00 xx 00 xx UTF-16BE 
     xx 00 00 00 UTF-32LE 
     xx 00 xx 00 UTF-16LE 
     xx xx xx xx UTF-8 

bug report wspomniałeś zostało zamknięte z tego powodu.

Z mojego rozumienia, każdy ważny tekst zakodowany w ASCII również jest prawidłowym UTF-8, więc wraz z brakiem specyfikacji materiałowej wyjaśnia, dlaczego działa teraz zgodnie z oczekiwaniami.

Generalnie myślę, że powinieneś skonfigurować edytor tekstów, aby zapisywać pliki w UTF-8, bez znaku kolejności bajtów. Zobacz dyskusję What's different between UTF-8 and UTF-8 without BOM?. Per What encoding is expected for Node.js source code?, Node.js akceptowałby znaki spoza ASCII w plikach źródłowych JS zakodowanych w ten sposób. Może to być przydatne, gdy chcesz osadzić łańcuch inny niż ASCII w kodzie źródłowym.

+0

ASCII jest podzbiorem UTF-8, pomijanie LM powoduje tylko problem, gdy zaczniesz używać znaków akcentowanych lub ideogramy, które pojawiają się w azjatyckich zestawach znaków (cokolwiek ponad kod 255 znaków). Domyślam się, że idealnym rozwiązaniem byłoby, gdyby mój edytor obsługiwał określone kodowanie używane przez specyfikację JSON do identyfikowania plików i aktywował ten mechanizm wykrywania w oparciu o rozszerzenie pliku .json, ale zespół Visual Studio prawdopodobnie nie pojawił się do tego (i jakoś wątpię, że kiedykolwiek to zrobią) – Ceilingfish

+1

@Ceilingfish Może jedno z przedstawionych tutaj rozwiązań działa? http://stackoverflow.com/questions/5406172/utf-8-without-bom –

+0

Bóg wie, dlaczego, ale w moim przypadku, kiedy uratowałem z BOM, zadziałało. W przeciwnym razie nie przeanalizował JSON. Używam wysublimowanego tekstu 2. –

1

Jedynym rozwiązaniem jest określenie dokładnej wersji zależności. NPM czasami nie rozpoznaje> lub .x

1

npm ERR! Unexpected token ?

W przypadku braku BOM, a także sprawdzić, czy po prostu mieć „?” gdzieś w pliku lub inne błędy, np. brakujący lub dodatkowy ",".

Powiązane problemy