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.


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

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


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ć


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 

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”.


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.


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

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.


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


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

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

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


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 :)


0

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


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.