Nie można zainstalować modułów węzła wymagających kompilacji w systemie Windows 7 x64 / VS2012

192

Nie mogę zainstalować żadnego z modułów wymagających kompilacji. Wszystkie zawodzą z następującym błędem:

MSBUILD : error MSB3411: Could not load the Visual C++ component "VCBuild.exe". ...

Moje środowisko:

  • Windows 7 Enterprise x64, wersja 6.1.7601
  • węzeł x86 0.8.16
  • npm 1.2.0
  • węzeł-gyp 0.8.2
  • Visual Studio 2012 i liczne pakiety

Powiązane zmienne środowiskowe:

Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShel l\v1.0;C:\Program Files\TortoiseGit\bin;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;c:\tools;c:\tools\node

Brak ZAWIERA, LIB, LIBPATH itp.

Zrobiłem krótkie badanie tego problemu i stwierdziłem, że przy poniższej konfiguracji ręczna kompilacja (wywoływanie bezpośrednio VCBuild.exe i msbuild.exe) zakończyła się powodzeniem dla ręcznie sklonowanego git: //github.com/einaros/ws.git:

SET Configuration=Release
SET PATH=%ProgramFiles(x86)%\Microsoft Visual Studio 9.0\VC\vcpackages
SET PATH=%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin;%PATH%
SET PATH=%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE;%PATH%
SET PATH=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A\Bin;%PATH%
SET PATH=%SystemRoot%\system32;%PATH%

SET INCLUDE=%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\include
SET INCLUDE=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A\Include;%INCLUDE%

SET LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A\Lib
SET LIB=%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\lib;%LIB%

SET MSBUILD="%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe"

VCBuild.exe C:\Tools\node\ws\build\bufferutil.vcproj "Release|Win32" /useenv
VCBuild.exe C:\Tools\node\ws\build\validation.vcproj "Release|Win32" /useenv
%MSBUILD% build/binding.sln /verbosity:diagnostic /nologo /p:Configuration=Release;Platform=Win32

Próbowałem wywołać węzeł-gyp z tymi samymi zmiennymi i nie udało się:

C:\!> git clone https://github.com/einaros/ws.git
C:\!> cd ws
C:\!\ws>node-gyp configure
...
C:\!\ws>node-gyp build
gyp info it worked if it ends with ok
gyp info using node-gyp@0.8.2
gyp info using node@0.8.16 | win32 | ia32
gyp info spawn C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe
gyp info spawn args [ 'build/binding.sln',
gyp info spawn args   '/clp:Verbosity=minimal',
gyp info spawn args   '/nologo',
gyp info spawn args   '/p:Configuration=Release;Platform=Win32' ]
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
C:\Users\User\.node-gyp\0.8.16\deps\uv\include\uv.h(55): fatal error C1083: Cannot open include file: 'stdint.h': No such file or directory [C:\!\
ws\build\binding.sln]
C:\Users\User\.node-gyp\0.8.16\deps\uv\include\uv.h(55): fatal error C1083: Cannot open include file: 'stdint.h': No such file or directory [C:\!\
ws\build\binding.sln]
gyp ERR! build error
gyp ERR! stack Error: `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onExit (c:\Tools\node\node_modules\node-gyp\lib\build.js:255:23)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:99:17)
gyp ERR! stack     at Process._handle.onexit (child_process.js:678:10)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "c:\\Tools\\node\\\\node.exe" "c:\\Tools\\node\\node_modules\\node-gyp\\bin\\node-gyp.js" "build"
gyp ERR! cwd C:\!\ws
gyp ERR! node -v v0.8.16
gyp ERR! node-gyp -v v0.8.2
gyp ERR! not ok

Może masz jakieś pomysły na ten temat?

Dzięki.

Alex Netkachov
źródło
Czy próbowałeś uruchomić vcvarsall.batzamiast ręcznie konfigurować środowisko?
JohnnyHK,
Bez powodzenia. Nadal „MSB3411: Nie można załadować komponentu Visual C ++„ VCBuild.exe ”.”
Alex Netkachov
BTW, mam lepsze wyniki z „C: \ Program Files \ Microsoft SDKs \ Windows \ v6.1 \ Bin \ SetEnv.Cmd”: błąd krytyczny C1083: Nie można otworzyć dołączonego pliku: „stdint.h”: Brak takiego pliku lub katalogu
Alex Netkachov
2
Właśnie w końcu mam bcrypt do zainstalowania, który wymaga budowania na 64-bitowym środowisku win7, problem z sortowaniem był uciążliwy. W mojej sytuacji postępowałem zgodnie z instrukcjami dla bcrypt i dla węzła-gyp. Clincher dla mnie instalował zestaw Microsoft Windows 7 SDK i platformę .Net 4. Kiedy to zostało zainstalowane (i zrestartowałem moją powłokę), stwierdziłem, że mogę skompilować wszystko poprzez instalację dla bcrypt. Zastanawiałem się więc, czy zainstalowałeś SDK? Pytam, ponieważ nie wspomniałeś o tym na liście.
Metalskin
1
Zostało opublikowane 19.11.2015 i TO DZIAŁA! (Wiele dobrych sugestii w tym temacie, ale bez radości) github.com/nodejs/node-gyp/issues/629#issuecomment-158163655 Procedura instaluje Build Tools 2015, a nie VS2012.
dkloke

Odpowiedzi:

148

Spróbuj - ustawi to globalnie:

npm config set msvs_version 2012 --global
srfrnk
źródło
1
Idealny! Naprawiono wszystkie moje problemy!
hansmei
2
Doskonale, dostałem błąd podczas uruchamiania zestawu skryptów wywołujących npm głęboko w jelitach. Nie chciałem modyfikować skryptów, więc była to dla mnie najlepsza opcja
Alastair
2
To powinna być zalecana odpowiedź, działająca jak urok w systemie Windows 10
William
2
Nie działa error MSB4019: The imported project "C:\Microsoft.Cpp.Default.props" was not found.
Zielony,
tylko na komputerze z systemem Windows 10 i VS2017 - użyłem Instalatora VS2017, aby również zainstalować narzędzia do kompilacji VC 2015. wtedy poprawka torazaburo zadziałała :) właściwie odpowiedź Catalint poniżej wygląda lepiej, ale nie próbowałem ...
Sean
143

Aby to zrobić bez instalacji VS2010 i tylko w 2012 r., Ustaw flagę msvs_version:

node-gyp rebuild --msvs_version=2012

npm install <module> --msvs_version=2012

zgodnie z komentarzem @Jacob

npm install --msvs_version=2013 jeśli masz wersję 2013

Alex
źródło
3
Chociaż uważam, że drugie polecenie powinno mieć również dwa myślniki na swoim parametrze - wstawiłem dla niego dwa myślniki i zadziałało. To mi pominęło błędy instalacji npm - dzięki!
Dullroar,
1
@Dullroar superuser.com/questions/372203/... działało dla mnie z 1 wzruszeniem ramion
Alex
Dzięki za to; npm installpolecenie dostał pracę dla mnie. Jedna kreska również działała dla mnie.
Seiyria
Powinno to być --msvs-version = 2012
RaduM
Działa to niesamowicie z moją instalacją systemu Windows 7 x64! Dzięki Microsoft (za bycie kutasami)!
Blairg23,
60

Aktualizacja v3: https://www.npmjs.com/package/windows-build-tools

instalacja npm --global windows-build-tools

pobiera i instaluje narzędzia Visual C ++ Build Tools 2015, dostarczone bezpłatnie przez Microsoft. Te narzędzia są wymagane do kompilacji popularnych modułów natywnych. Zainstaluje również Python 2.7, odpowiednio konfigurując komputer i npm.

Aktualizacja v2:

node-gyp zaktualizował swój plik Readme, aby zawierał instrukcje dla systemu Windows

Oryginalny:

Nie potrzebujesz całego studia wizualnego, możesz pobrać tylko narzędzia do kompilacji

Microsoft Build Tools 2013: http://www.microsoft.com/en-us/download/details.aspx?id=40760

uruchom cmd, aby ustawić flagę globalną do używania wersji 2013:

npm config set msvs_version 2013 --global

po tym wszystko powinno wrócić do normy i przebudowa npm install / node-gyp będzie działać

Catalint
źródło
Narzędzia kompilacji nie obejmują zestawów narzędzi platformy ... niestety nie wydaje się, aby można było zainstalować Visual Studio :( przeczytaj również instrukcje instalacji dla node- gyp
Michael K.
zaktualizowana odpowiedź w celu uwzględnienia nowego readme z node-gyp, dzięki @MichaelK.
catalint
2
Zainstalowałem VS2015 i uruchomiłem to polecenie, npm config set msvs_version 2015 --globalktóre również działa
JRulle
Podobnie instalacja Microsoft Build Tools 2015 i uruchamianie npm config set msvs_version 2015 --globaldziała
Jon Onstott
1
Uruchamianie „narzędzi do budowania systemu Windows”, jak wspomniano powyżej, przy użyciu DID programu NPM (Menedżer pakietów węzłów) , ale działało tylko dla mnie przy użyciu programu Microsoft PowerShell . Jest to narzędzie Windows dostarczane przez Microsoft od ponad 10 lat. Ma uprawnienia administracyjne wymagane do uruchomienia Narzędzi do budowania. Zlokalizuj PowerShell, kliknij go prawym przyciskiem myszy i uruchom jako Administrator. Zauważ, że uruchomienie standardowego monitu CMD jako Administrator może również działać, ale miałem sukces z PowerShell . Dodatkowe narzędzia i obsługa poleceń typu UNIX mogą być częścią tego, dlaczego działa, chociaż uruchamianie go jako administratora było większym rozwiązaniem.
Michael M,
41

wystarczy dodać --msvs_version = 2012

node-gyp rebuild --msvs_version=2012

lub

node-gyp configure --msvs_version=2012
node-gyp build 
msulhas
źródło
Ta sama odpowiedź jak powyżej.
Blairg23,
1
Najpierw odpowiedziałem, spójrz na datę :)
msulhas,
21

Miałem ten sam problem podczas próby zainstalowania pakietu dla Node.js. Po obszernym wyszukiwaniu w Google znalazłem ten test: https://github.com/TooTallNate/node-gyp/wiki/Visual-Studio-2010-Setup

Gdy wykonałem te kroki, mogłem bez problemu użyć „instalacji npm”.

Robin Ridderholt
źródło
DZIĘKI!!! MASYWNE KUDOS ps musisz także dodać Python do swojej ścieżki: stackoverflow.com/questions/4621255/…
sidonaldson
Jeśli masz już zainstalowany program Visual Studio, najlepiej głosowane odpowiedzi mogą działać, jednak jeśli go nie masz, potrzebujesz tej odpowiedzi. Dzięki!
JD Smith
Ten przewodnik jest najlepszy do tej pory. Niemniej jednak cały ten problem z base64 jest całkowicie niepotrzebny i denerwujący!
Benedikt,
O tak, właśnie tego potrzebowałem. Najlepszy spacer, jaki znalazłem i działa!
Corin
Mam projekt Node.js korzystający z zestawu Couchbase SDK dla Node, który dobrze działa na moim komputerze roboczym, który ma Visual Studio 2008, 2010 i 2012. Chciałem przetestować instalację dla „hobbystów” bez żadnych kopii Visual Studio. Odinstalowałem wszystkie narzędzia programistyczne i zestawy SDK z mojego komputera domowego i wypróbowałem różne opcje „Express”. Dopiero po wykonaniu tych kroków udokumentowanych przez TooTallNate udało mi się zbudować pliki binarne Couchbase dla systemu Windows, w tym ten krok, aby ponownie powiązać działanie jako aplikacja „komputerowa” przy użyciu NW.js (wcześniej węzeł webkit): 'nw-gyp rebuild - -cel = 0,12,0 '
Rick Rutt
13

Dzięki @felixrieseberg wystarczy zainstalować pakiet npm dla Windows-build-tools i możesz zacząć.

npm install --global --production windows-build-tools

Nie musisz instalować programu Visual Studio.

Nie musisz instalować Narzędzi do kompilacji Microsoft.

Z repozytorium:

Po instalacji npm automatycznie uruchomi ten moduł, który pobiera i instaluje Visual C ++ Build Tools 2015, dostarczany bezpłatnie przez Microsoft. Te narzędzia są wymagane do kompilacji popularnych modułów natywnych. Zainstaluje również Python 2.7, odpowiednio konfigurując komputer i npm.

Windows Vista / 7 wymaga .NET Framework 4.5.1 (obecnie nie jest instalowany automatycznie przez ten pakiet)

Obie instalacje są wolne od konfliktów, co oznacza, że ​​nie powodują bałaganu w istniejących instalacjach Visual Studio, C ++ Build Tools lub Python.

Ramazan Polat
źródło
1
Masz absolutną rację. Przeszukuję wersje VS, npm i gyp przez wiele godzin, ale bez .NET 4.5.1 (dokładnie) nie ma absolutnie żadnego sposobu na skompilowanie go. To wyjaśnia również, dlaczego będzie działać z większością instalacji VS, ponieważ są one dostarczane z .NET w pakiecie.
Xan-Kun Clark-Davis
12

w systemie Windows 8 działało dla mnie przy użyciu:

npm install -g node-gyp -msvs_version=2012

następnie

npm install -g restify
amgohan
źródło
1
Nie sądzę, że pakiet przywracania ma coś wspólnego z pytaniem OP, przywracanie jest tylko jednym z kilku pakietów dotkniętych tym samym problemem.
adelriosantiago
5

Po DNIACH kopania ktoś na IRC zasugerował, żebym spróbował użyć

Windows 7.1 SDK Command Prompt

Skrót (linki do C: \ Windows \ System32 \ cmd.exe / E: ON / V: ON / T: 0E / K "C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Bin \ SetEnv.cmd" ). Myślę, że MUSISZ mieć starszy zestaw SDK 7.1 (nawet w systemie Windows 8.1), ponieważ nowsze używają msbuild.exe zamiast vcbuild.exe, czego chce węzeł-gyp, mimo że w tym momencie jest dwa razy starszy niż węzeł: /

Raz w tym pytaniu musiałem uruchomić następujące polecenie, aby uzyskać kontekst x86, ponieważ kompilator generował błąd jako błąd w stosunku do architektury:

setenv.cmd /Release /x86

Następnie udało mi się z powodzeniem uruchomić polecenia npm, które próbowały użyć węzła gyp do ponownej kompilacji.

rainabba
źródło
4

Miałem tę samą sprawę i wykonałem całą magię powyżej, jedyną rzeczą, która zrobiła dla mnie magię, jest https://github.com/atom/atom/issues/2435

„Ponieważ opcja --msvs_version = 2013 nie jest przekazywana do węzła-gyp, gdy jest uruchamiana przez skrypt kompilacji. Ustaw zmienną env GYP_MSVS_VERSION = 2013 i powinna ona działać później.”

Huk! zadziałało

amitgur
źródło
3

W systemie Windows Pomogło mi to: (kredyty idą do) https://github.com/TooTallNate/node-gyp/wiki/Updating-npm%27s-bundled-node-gyp Próbowałem MINGW32, ale bez powodzenia.

na cmd.exe

$ cd "C:\Program Files\nodejs\node_modules\npm"
$ npm install -g node-gyp@latest
danielpopa
źródło
1
jeśli to się nie powiedzie, sprawdź, czy masz zmienną środowiskową PYTHON = c: \ Python27 \ python.exe i stackoverflow.com/a/15937635/2873481
Vladimir Vukanac
npm install -g node-gyp @ najnowsze?
Alexander Mills,
2

W przypadku 64-bitowego systemu Windows 8, instalującego zmq i protobuf, działało dla mnie: Instaluj Visual Studio 2012 W wierszu poleceń:

SET VisualStudioVersion=11.0
npm install zmq
npm install protobuf
ihm
źródło
Visual Studio 2012 jest również wyposażony w „Wiersz polecenia programisty dla VS2012”, więc nie musisz dostosowywać zmiennej env PATH
strider
1

Myślę, że rozwiązaniem jest pobranie instalacji Microsoft Windows SDK na serwer 2008 z .NET Framework 3.5

lub po prostu zainstaluj Visual Studio 2008 .

Problem polega na tym, że Windows buduje node-gyp wykonuje plik vcbuid.exe i z jakiegoś powodu nie może go znaleźć.

Dzięki

Hubert Boma Manilla
źródło
Oto link do
zestawu
2
Powodem, dla którego nie znalazł VCBuild, jest to, że został zastąpiony MSBuild w 2010 r., Zgodnie z codeproject.com/Articles/562386/…
UnPlan2ned 29.09.2013
Zobacz moją odpowiedź poniżej. Wymagany jest program vcbuild.exe, ale należy ustawić wiele zmiennych środowiskowych, a projekt node-gyp ich nie dokumentuje.
rainabba
0

Miałem też dużo problemów z kompilacją zmod Nodejsa.

Aby rozwiązać problem z vcbuild.exe, po prostu dodaj go do ŚCIEŻKI

W przypadku innych problemów mogłem skompilować tylko za pomocą Windows 7.1 SDK Command Prompt

(Programy menu -> Microsoft Windows SDK v7.1 -> Wiersz polecenia zestawu Windows 7.1 SDK)

I od pytania:

npm install zmq

To działa :)

Kleyson Rios
źródło
0

Po długiej walce zmieniłem architekturę mojego węzła na x86 i działało to jak urok.

użytkownik3035156
źródło
1
czy możesz rozwinąć więcej informacji na temat przejścia na x86?
Arman Ortega
0

w cmd ustaw ścieżkę Visual Studio w zależności od twojej wersji jako

Visual Studio 2010 (VS10): SET VS90COMNTOOLS=%VS100COMNTOOLS%

Visual Studio 2012 (VS11): SET VS90COMNTOOLS=%VS110COMNTOOLS%

Visual Studio 2013 (VS12): SET VS90COMNTOOLS=%VS120COMNTOOLS%

W node-master (oryginalny moduł węzła pobrany z git) uruchom vcbuild.bat z uprawnieniami administratora. vcbild.bat wygeneruje zależności związane z oknami i doda nazwę folderu Release w węźle głównym

Po uruchomieniu kompilacja plików potrwa.

Następnie w katalogu z poleceniem użycia pliku .gyp

node-gyp rebuild --msvs_version=2012 --nodedir="Dive Name:\path to node-master\node-master"

to zbuduje wszystkie zależności.

niket
źródło
0

Ten samouczek rozwiązałem ten problem w systemie Windows 8 i Windows 10 pro. Wiele razy próbuję rozwiązać ten problem za pomocą wielu różnych rozwiązań, ale z tym działałem tylko : http://www.serverpals.com/blog/building-using-node-gyp-with-visual-studio-express -2015-on-windows-10-pro-x64 Zauważyłem, że nie używałem nodist do kontrolowania wersji węzła jak ten samouczek, używam NVM i działałem dobrze, nie testuję tego samouczka z nodist. Użyłem węzła 5.2.0.

Marco Blos
źródło