web-dev-qa-db-ja.com

node-gypをWindows7プラットフォームで動作させるにはどうすればよいですか

標準の「HelloWorld」の例[2]をコンパイルしようとすると、Windows 7 + Node.jsプラットフォームでnode-gypを使用しようとして失敗しました[3]。注:node-gypは、「-g」の有無にかかわらずnpm install contextifyを試行したときに、同様の方法で失敗します[3]。したがって、これらは関連する問題である可能性があります。

構成:

  • node-gyp 0.12.2
  • Windows 7 x64 SP1
  • Python 2.7
  • Node.js 0.10.24
  • Visual Studio 2010 per [1](2012年も試してみました)
  • [1]ごとのVSSDK 7.1(32ビットおよび64ビットバージョンを試しました)
  • 標準のWindowsコマンドプロンプトまたはSDK7.1cmdプロンプトからnode-gypを実行する

参照:
[1] https://github.com/TooTallNate/node-gyp/wiki/Visual-Studio-2010-Setup

[2] https://github.com/joyent/node/tree/master/test/addons/hello-world

[3]「helloworld」[2]プロジェクトの「node-gyprebuild」は、次の2つのエラーを生成します。

.... node-gyp\0.10.24\deps\uv\include\win.h(8738):エラーC2371: 'SYSTEM_POWER_STATUS':再定義;さまざまな基本タイプ[...\build\test.vcxproj]

.... node-gyp\0.10.24\deps\uv\include\mswsock.h(27):致命的なエラーC 1083:インクルードファイルを開くことができません: '_ mingw.h':そのようなファイルまたはディレクトリはありません[.. ..\build\test.vcxproj]

および次の2つの警告:

.... node-gyp\0.10.24\deps\uv\include\win.h(13513):警告C4005: 'UNALIGNED':マクロの再定義[...\build\test.vcxproj]

.... node-gyp\0.10.24\deps\uv\include\mswsock.h(26):警告C4068:不明なプラグマ[...\build\test.vcxproj]

完全なトレースは次のとおりです。

C:\sigma\node_modules\x>node-gyp rebuild
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | win32 | x64
gyp info spawn python
gyp info spawn args [ 'C:\\Users\\Anybody\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\gyp\\gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'msvs',
gyp info spawn args   '-G',
gyp info spawn args   'msvs_version=auto',
gyp info spawn args   '-I',
gyp info spawn args   'C:\\sigma\\node_modules\\x\\build\\config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   'C:\\Users\\Anybody\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   'C:\\Users\\Anybody\\.node-gyp\\0.10.24\\common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=C:\\Users\\Anybody\\.node-gyp\\0.10.24',
gyp info spawn args   '-Dmodule_root_dir=C:\\sigma\\node_modules\\x',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--generator-output',
gyp info spawn args   'C:\\sigma\\node_modules\\x\\build',
gyp info spawn args   '-Goutput_dir=.' ]
gyp info spawn msbuild
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=x64' ]
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.  test.cpp
C:\Users\Anybody\.node-gyp\0.10.24\deps\uv\include\win.h(8738): error C2371: 'SYSTEM_POWER_STATUS' : redefinition; different basic types [C:\sigma\node_modules\x\build\test.vcxproj]  C:\Users\Anybody\.node-gyp\0.10.24\deps\uv\include\win.h(8737) : see declaration of 'SYSTEM_POWER_STATUS'

C:\Users\Anybody\.node-gyp\0.10.24\deps\uv\include\win.h(13513): warning C4005: 'UNALIGNED' : macro redefinition [C:\sigma\node_modules\x\build\test.vcxproj] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdef s.h(502) : see previous definition of 'UNALIGNED'

C:\Users\Anybody\.node-gyp\0.10.24\deps\uv\include\mswsock.h(26): warning C4068 : unknown pragma [C:\sigma\node_modules\x\build\test.vcxproj] C:\Users\Anybody\.node-gyp\0.10.24\deps\uv\include\_mingw.h(33): warning C4068: unknown pragma [C:\sigma\node_modules\x\build\test.vcxproj]

C:\Users\Anybody\.node-gyp\0.10.24\deps\uv\include\_mingw.h(51): fatal error C1 189: #error :  ERROR: You must use a GNU Compiler. [C:\sigma\node_modules\x\build\test.vcxproj]

gyp ERR! build error
gyp ERR! stack Error: msbuild failed with exit code: 1
gyp ERR! stack at ChildProcess.onExit (C:\Users\Anybody\AppData\Roaming\npm\
node_modules\node-gyp\lib\build.js:267:23)
gyp ERR! stack at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:789:12)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "node" "C:\\Users\\Anybody\\AppData\\Roaming\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\sigma\node_modules\x
gyp ERR! node -v v0.10.24
gyp ERR! node-gyp -v v0.12.2
gyp ERR! not ok   
16
user3208880

この質問は1か月前のものですが、結局Web全体を検索し、これは検索結果の一部でした。

だからここにすべきではないがそれはうまくいく答えがあります。

まず、私はnode-gypやビジュアルスタジオ全体のコンパイルなどに精通していません。python(本当に静かな[〜#〜] wtf [〜#〜]

したがって、既知の理由はありませんが、0.10.22より古いnodejsバージョン(私は今それを実行しているので、それが開始する場所であると想定しています)

システムでファイル「uv.h」を検索すると、いくつかの結果が得られる場合があります[〜#〜] if [〜#〜]以前にnodejsバージョンをインストールしたことがある場合は、読み続けることができます。

以前の0.10.3nodejsバージョンでは、node-gypにuv.hが含まれていました。

<DRIVERLETTER>:\Users\<USERNAME>\.node-gyp\0.10.3\deps\uv

したがって、npmのドキュメントを読むと、npm installに引数があります。

--nodedir =/path/to/node/source引数を使用すると、npmはノードのソースコードを見つけて、npmがネイティブモジュールをコンパイルできるようになります。

したがって、最終的なコマンドは

npm install <package> --nodedir="<DRIVERLETTER>:\Users\<USERNAME\.node-gyp\0.10.3"

警告が表示される場合がありますが、正常に完了するはずです。

9
Gntem

何かをする前に、ノードのWebサイトからインストールしてNodeとNPMを更新します(Windowsではノードとnpmをnpm経由で更新すると無効になります。削除して再インストールするかどうかはわかりません) -すべてが順番に並んでいる指示は最新のものですが、それは間違いなく主要なPITAであり、その投稿がノード年で少し古いことを考えると、代替案を探すように私を刺激しました。

最終的に、これはpgモジュールの依存関係としてのnode-gypの問題を解決し、2013年と比較して実行されたと私は信じています(または少なくとも、動作を開始する前に探していたものです)。

1
Erik Reppen

これは私がそれを解決するのを助けたものです:

何らかの理由で、2つの異なるディレクトリにnode-gypがありました。

ディレクトリ1:

C:\Users\Imran Bughio\.node-gyp\0.10.21\

ディレクトリ2:

C:\Users\Imran Bughio\Documents\.node-gyp\0.10.21\


2番目のディレクトリにuvフォルダ内にdepsフォルダがありましたが、そのフォルダは1番目のディレクトリにありませんでした。

パスは次のとおりです。uv.hファイルが含まれていることに注意してください。

C:\Users\Imran Bughio\.node-gyp\0.10.21\deps\uv

解決策:

Uvと他のすべての追加フォルダーをディレクトリ2からディレクトリ1に移動しただけです。

@Phoenixの回答から少しヒントが得られ、最終的にはこれを解決するのに役立ちました。ありがとう、Phoenix。

0
Imran Bughio