2015-07-22 8 views
6

Napisałem skrypt do złomowania stron internetowych z CasperJS i działa idealnie na Mac OS 10.10.4 z CasperJS w wersji 1.1.0-beta3 i PhantomJS w wersji 1.9.8, ale kiedy i umieścić ten sam skrypt na jednym z moich serwerów, który jest Ubuntu 14.04 (działa wewnątrz Docker pojemnika) z tego samego środowiska (CasperJS i PhantomJS wszystkie te same wersje) to nagle po prostu wyjść to:Web scrapping za pomocą CasperJS zwraca dziwny błąd, który nie jest udokumentowany

jestem `fs `modules

Co jest dość dziwne. Jednym z moją sugestią jest to, że w tym scenariuszu jestem również stara się wymagać pewnych innych skryptów, wymagają tak:

var parsingStrategy = require(strategiesPath + strategyName); 

i ścieżka do tych strategii jest prawidłowa już sprawdzone, że. Wszystkie inne rzeczy, które robię w tym skrypcie, są zwykłymi rzeczami CasperJS, które są udokumentowane i działają dobrze. Jakieś pomysły?

+0

Cóż, to dość dziwne. Czy zainstalowałeś CasperJS przez npm? Czy "strategyName" kończy się na ".js" czy nie? Czy wypróbowałeś drugą? Czy przejrzałeś repozytorium źródłowe CasperJS, aby wyszukać ten ciąg? –

+0

CasperJS nie jest instalowany przez npm, ale z repozytorium github. Ciąg 'strategyName' nie kończy się na" .js ", a jedynie nazwa modułu strategii. Może dobrze jest zajrzeć do repo dla tego ciągu. – fre2ak

+0

Jak mogę wyszukać w repozytorium Githuba CasperJS ciąg znaków? – fre2ak

Odpowiedz

6

Okay, mam dla ciebie odpowiedź - "fs" to moduł zawarty w pakiecie z węzłem, więc nie musi być instalowany przez npm. Pakiet został pobrany to: https://www.npmjs.com/package/fs i wszystko zawiera ona jest ...

console.log("I'm `fs` modules"); 

Kiedy zrobiłeś:

npm uninstall fs 

npm install -g fs 

Węzeł stosowany swój pakiet lokalny - że dostarczany z - i ignorowane globalny w całości. Zagadka rozwiązana. ;)

+0

Mamy więc pana. [alsotang] (https://www.npmjs.com/~alsotang), aby podziękować za to. Miły. Teraz, jeśli moglibyśmy uzyskać tylko adminów npm, aby usunąć ten pakiet z repozytorium, lub aby dodać mechanizm ostrzegawczy do NPM, gdy masz zamiar nadpisać wbudowane pakiety. Spójrz na to [liczba pobrań] (https://www.npmjs.com/package/fs): "71.432 pliki do pobrania w ostatnim miesiącu" !!! Wreszcie są tam [bardziej fałszywe pakiety] (https://www.npmjs.com/package/http). –

+0

Co? Jeśli ta biblioteka była dołączona do węzła, dlaczego instalujesz ją globalnie? Czy potrzeba instalacji lib nie wskazuje na "NIE w pakiecie"? – lux

+0

Dzięki! Mamy dużo raportów w repozytorium CasperJS? Jak to zrobić, aby móc połączyć konsolę.log(): / –

3

Miałem ten sam problem. Mój system operacyjny to okno 7, ale nie sądzę, aby system operacyjny był problemem.

To, co zrobiłem i zadziałało

  1. npm uninstall fs

  2. npm install -g fs

Nie wiem, dlaczego tak się stało, ale to teraz naprawić.

+0

Naprawiłem to jakoś, ale prawda jest taka, że ​​nie mam pojęcia, jak to się stało: D – fre2ak

+0

Powinieneś 'npm uninstall -g fs', aby odzyskać prawdziwe' fs' z powrotem na całym świecie. Właściwie pierwsza linia naprawiłaby go, gdybyś zrobił 'npm uninstall --save fs'. –

1

To nie jest błąd, to wiadomość o numerze console.log. Ten moduł może istnieć dla uniwersalnych celów JS (fs nie ma zastosowania do przeglądarki, dzięki czemu można zmapować import w środowisku przeglądarki do tego pakietu no-op z browserify/webpack i nie ma awarii twojego kodu). W takim przypadku wiadomość powinna powiedzieć nieco jaśniej.

Może również zostać opublikowany jako słowo kończące dla pakietu fs, ponieważ może to być potencjalny exploit, jeśli ktoś opublikuje pakiet z niewłaściwą intencją modląc się, aby użytkownicy przypadkowo go zainstalowali i uruchomili zamiast wbudowanego fs moduł.

Powiązane problemy