2013-08-06 21 views
7

wygląda tak (nazwa/opis/itp. Pominięte).Instalacja npm nie wydaje się uzyskać wszystkich zależności

{ 
    "dependencies": { 
     "express": "3.3.4", 
     "jade": "0.34.x", 
     "mongoose": "3.6.x" 
    }, 
    "devDependencies": { 
     "vows": "0.7.x" 
    } 
} 

użyłem express w repozytorium i prowadził auto generowane node app.js. To działało, ale kiedy użyłem curl http://localhost:port, otrzymałem komunikat "Nie mogę znaleźć modułu parser postaci." Uruchomiłem npm install character-parser, a następnie otrzymałem komunikat "Nie mogę znaleźć transformatorów modułów". Stało się to jeszcze kilka razy, ale po zainstalowaniu ich wszystkie zaczęły działać.

Myślałem, że npm install miał zainstalować rekursywnie zależności. To również mnie martwi, ponieważ oczywiście chcę, aby package.json był gotowy do użycia po wdrożeniu aplikacji.

+0

Ale npm instaluje się rekurencyjnie. Po uruchomieniu 'npm install', czy są jakieś błędy? Proszę je opublikować, jeśli tak. – gustavohenke

+0

@gustavohenke brak błędów, niestety. Mówi, że wszystko jest w porządku, ale kiedy próbuję uruchomić węzeł, otrzymuję brakujący błąd modułu, dopóki nie użyję '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'm install install. Czy muszę używać 'sudo npm'? –

+1

Czy masz npm-shrinkwrap.json? Jeśli tak, sprawdź, czy na liście znajdują się wymagane moduły. – Fluffy

Odpowiedz

-1

Po uruchomieniu npm install <name-of-package> zainstaluje pakiet w folderze node_modules, ale nie doda go jako zależności. Aby zainstalować pakiet i zapisać go jako zależność w swojej package.json, należy użyć flagi --save tak:

npm install <name-of-package> --save

npm documentation zapewnia dalsze informacje na temat dodatkowych flag, które można wykorzystać, takich jak --save-dev flaga do zapisywania zależności deweloperskich i flaga --save-optional do zapisywania opcjonalnych zależności do twojego package.json.

2

Oto prosty skrypt zbierać zależności w ./node_modules:

var fs = require("fs"); 

function main() { 
    fs.readdir("./node_modules", function (err, dirs) { 
    if (err) { 
     console.log(err); 
     return; 
    } 
    dirs.forEach(function(dir){ 
     if (dir.indexOf(".") !== 0) { 
     var packageJsonFile = "./node_modules/" + dir + "/package.json"; 
     if (fs.existsSync(packageJsonFile)) { 
      fs.readFile(packageJsonFile, function (err, data) { 
      if (err) { 
       console.log(err); 
      } 
      else { 
       var json = JSON.parse(data); 
       console.log('"'+json.name+'": "' + json.version + '",'); 
      } 
      }); 
     } 
     } 
    }); 

    }); 
} 

Na jednym projekcie pracuję na wyjście wygląda następująco:

"progress": "0.1.0", 
"request": "2.11.4", 

Jeśli pamiętać, aby usuń przecinek z ostatniego wpisu, możesz skopiować i wkleić dane wyjściowe.

1

mam dokładnie ten błąd, a ja npm instalacji dla https://github.com/HenrikJoreteg/humanjs-sample-app/

jestem na komputerze z systemem Windows, więc podejrzenie, że był problem z dziwnymi ograniczeniami że Windows ma od liczby znaków w ścieżka pliku.

Rozwiązałem to, zwierając moją ścieżkę podstawową do folderu z trzema znakami w katalogu głównym (w tym przypadku z C: \ projects \ humanjs-sample-app do C: \ hjs). Kiedy ponownie uruchomiłem npm, wszystko działało. Nie jestem zadowolony z tej rezolucji. Nie powinienem się martwić, że moja nazwa ścieżki podstawowej jest zbyt długa. Jest to jeden z powodów, dla których ludzie często nie rozwijają węzłów na komputerach z systemem Windows.

Alternatywne rozwiązanie to rozwijanie na systemie Linux lub Mac, jeśli jeszcze nie jest. To prawdopodobnie moja długoterminowa strategia.

+0

Po prostu zauważyłem, że na twoim pytaniu znajduje się znacznik Ubuntu, więc może to nie być Twój problem. Nie usunę tego jednak, na wszelki wypadek. – PureCognition

Powiązane problemy