2013-07-30 18 views
9

Ich versuche, meine Knoten Paketabhängigkeiten zu verwalten. Ich möchte in der Lage sein, alle erforderlichen Abhängigkeiten zu installieren, indem Sie einen Befehl ausführen, und von dem, was ich gelesen habe, ist eine Möglichkeit, das zu erreichen, eine package.json-Datei zu verwenden und npm install auszuführen. Also meine JSON-Datei sieht wie folgt aus:npm install kann nicht lesen 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" 
} 
} 

jedoch npm install Berichte der folgende Fehler:

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 

Wer weiß, warum?

+0

Dieses besondere package.json funktioniert gut für mich. –

+0

@MerynStol das ist genial. Freut mich zu wissen, dass es wirklich so einfach ist. Vielleicht ist es ein Plattformproblem. Ich führe diesen Befehl auf Windows 8 und eine 64-Bit-Architektur – Ceilingfish

+1

Angesichts der "Unerwartetes Token?" Fehler, vielleicht gibt es ein seltsames (unsichtbares) Zeichen in der JSON-Datei. Versuchen Sie es vielleicht mit einem anderen Texteditor oder spielen Sie mit den Einstellungen Ihres Editors herum. Speichern Sie die Datei package.json erneut. Ich würde UTF-8 überall verwenden. –

Antwort

13

Richtige Antwort:

Der Editor fügt eine Byte-Reihenfolge-Marke auf die JSON-Datei, die das Oktett-Stream eine ungültige JSON Text macht.

JSON RFC sagt:

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 

Die bug report Sie erwähnt aus diesem Grund geschlossen wurde.

Soweit ich weiß, ist jeder gültige ASCII-kodierte Text auch gültiger UTF-8-Code. Zusammen mit dem Fehlen der Stückliste erklärt dies, warum er jetzt wie erwartet funktioniert.

Im Allgemeinen sollten Sie Ihren Texteditor einrichten, um Dateien in UTF-8 ohne Byte-Order-Markierung zu speichern. Siehe What's different between UTF-8 and UTF-8 without BOM? zur Diskussion. Per What encoding is expected for Node.js source code? akzeptiert Node.js Nicht-ASCII-Zeichen in JS-Quelldateien, die auf diese Weise codiert sind. Dies kann nützlich sein, wenn Sie eine Nicht-ASCII-Zeichenfolge irgendwo im Quellcode einbetten möchten.

+0

ASCII ist eine Teilmenge von UTF-8, das Weglassen der Stückliste verursacht nur ein Problem, wenn Sie akzentuierte Zeichen oder verwenden Ideographen, die in asiatischen Zeichensätzen vorkommen (alles über Zeichencode 255). Ich denke, die ideale Lösung wäre, dass mein Editor die spezifische Kodierung unterstützt, die die JSON-Spezifikation zum Identifizieren von Dateien verwendet, und den Erkennungsmechanismus basierend auf einer .json-Dateierweiterung aktiviert. Leider scheint das Visual Studio-Team nicht herumgekommen zu sein zu diesem (und ich bezweifle irgendwie, dass sie jemals werden) – Ceilingfish

+1

@Ceilingfish Möglicherweise funktioniert eine der Lösungen, die hier gepostet werden? http://StackOverflow.com/Questions/5406172/utf-8-without-bom –

+0

Gott weiß warum, aber in meinem Fall, als ich mit BOM gespeichert, hat es funktioniert. Andernfalls konnte JSON nicht analysiert werden. Ich verwende erhabenen Text 2. –

1

Die einzige Lösung besteht darin, die genaue Version der Abhängigkeiten anzugeben. NPM manchmal nicht erkennt> oder .x

1

npm ERR! Unexpected token ?

Falls es keine BOM ist, auch wenn Sie nur ein „?“ Haben irgendwo in der Datei oder anderen Fehlern, z.B. ein fehlendes oder zusätzliches ",".

Verwandte Themen