質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

7663閲覧

VS2017だけでnode-gypによるコンパイルを成功させる方法

raccy

総合スコア21735

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

2グッド

2クリップ

投稿2017/10/19 13:54

通常、Windowsでnode-gypによるコンパイルを行うには、コンパイル環境として次のどちらかが必要になります。

  • Visual Studio 2015 (Visual C++をオプションで選択)
  • Visual C++ 2015 Build Tools

※ windows-build-toolsでのインストールはVisual C++ 2015 Build Toolsを自動的にインストールするだけです。

ですが、現在、Visual Studio Community 2017(以下VS2017)を入れている環境であり、できれば他のバージョンのVisual Studioは入れたくありません(コンポーネントの管理が複数になるため)。VS2017ではVC++2015ツールセットをオプションでインストールすることができますので、これでなんとかできないかとかれこれ半年ほど試行錯誤してきましたが、未だにできていません。

ということで、VS2017のインストーラーであるVisual Studio Installerで入れられるものだけでnode-gypによるコンパイルができる環境にする方法は無いのでしょうか?

###環境

Windows 10 Pro 1709 (つい先日まで1703でしたが、とくに変わってなかったです)

VS2017でインストールするコンポーネント

  • デスクトップ用の VC++ 2015.3 v140 ツールセット (x86、x64)
  • Python 2 (2.7.13) (32 ビット)
  • Python 2 (2.7.13) (64 ビット)
  • Windows 8.1 SDK

※ 関係あるのは上記だけだと思いますが、他にもC#やVC++2017などもインストールしています。
※ Pythonについては公式のパッケージやAnacondaのパッケージに変えてやったりもしましたが、できませんでした。

環境変数

GYP_MSVS_VERSION=2015

node_config

msvs_version = "2015" python = (Pythonのパス)

※ pythonについては入れたときのPythonによって変えていました。

###参考にした情報

https://github.com/npm/npm/issues/10421#issuecomment-336092786

VS2017のVC++2015のバッチのバグはなおっているという情報もあります。バッチをたたき、VCTargetsPathも設定して、「"C:\Microsoft.Cpp.Default.props"がみつかりません」は出なくなりましたが、違うエラーが出て、もう、よくわかりません。

その他「私はこれでうまくいった」という情報はnode関係のissuesやStackOverflowで見かけては、全て試してきまたつもりですが、一度も成功していません。その人の環境が詳しく書いていなくて、私の環境と何が違うのかがわかりません。


本当はなんとか自分で調べきってQiitaに記事にしようとしたのですが、ことごとく失敗に終わったために断念している状態です。

Win10 + VS2017 (VS2015や個別でVC++ Build Toolを入れていない)という環境で、node-gypを使ったコンパイルができているって方が居れば、ぜひ、どうやってセットアップしたかを教えてください。

miyabi-sun, maisumakun👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

2017からインストールディレクトリ等がいろいろ変わりビルドツール側では今までの方法で2017に対応することができなくなったようです。
ですので、gypを2017に対応させる必要があります。
以前v8のビルドでgypで2017を使ってビルドできなかったので調べたときはそんな状態でした。
gypはやめてgnでビルドしたのでその後どうなったかは知りませんが、
https://github.com/nodejs/node-gyp/tree/master/gyp
を見ると全然更新されていないのでgypを更新してみたらどうでしょうか?

投稿2017/10/30 12:58

hmmm

総合スコア818

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raccy

2017/10/30 13:11

VC++2017でコンパイルしたいわけでは無くて、VS2017で入るVC++2015でコンパイルをしたいのです。node-gypの処理は失敗するのですが、途中で自動作成されているプロジェクトファイルを手動で開いてVisual Studio上でコンパイルできることは確認できています。gypが未対応と言うより、いろいろなファイルのパスの問題だと持っているのですが、どこをどうすればなおるのか見つからないため、こうすればできたという事例がほしいということです。
hmmm

2017/10/30 14:51

@raccy 失敗しているのであれば、対応していないということです。gypのレポジトリを見ましたがgypが2017に対応したのは2017/04/16です。2017でいろいろ変わったのだから対応しないとMSBuildを見つけられないはずです。 ですので、gypを2017に対応したものに変更するのは最低限必要な作業ではないでしょうか?
raccy

2017/10/30 14:59

すいません。hmmmさんがいっている2017というのはVisual C++ 2017のことですか?Visual Stuido 2017のことですか?それとも両方ですか?ちょっと話が噛み合ってないような気がしまして。
hmmm

2017/10/30 15:31

あーかみ合っていない理由が分かりました。 Visual Stuido 2017というよりはVS2017の付属のMsBuild.exeです。gypを使ってビルドをするのであれば、c++のコンパイラの前にMsBuildがどこにあるかを見つけられないといけません。 それをクリアして初めて2015のツールセットを使ってビルドできるのか?という話になると思います。
raccy

2017/10/30 22:08

ああなるほど。MsBuild.exeはgybに2015指定して普通に認識できていたので、VC++2015コンポーネントで一緒に入る物を使っていると思っていたのですが、違うのでしょうか? C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140 にあるものを認識していたのですが、これってVC++2015コンポーネント用では無かったという話だったのですか?
hmmm

2017/10/31 02:11

MsBuild.exeが認識できている?とのことで調べてみましたが、node-gyp側で対応が入っていました。https://github.com/nodejs/node-gyp/blob/master/lib/find-vs2017.js ただ現状の処理だとツールセットにv141が使用されるのでlib/configure.jsをmsbuild_toolsetで検索してv140に書き換えてください。それでnode-gyp configure --msvs_version=2017、node-gyp build --msvs_version=2017で2017のMSBuildでv140のツールセットを使用してビルドできました。
raccy

2017/10/31 12:24

node-gyp側が対応が入っていたのですね。 早速試そうと、仕方が無く入れていたVC++Build Tool 2015をアンインストールしてみようとしたのですが、別のバグでアンインストールできなくなって、すぐには試そうには無い状態です。ひとまず、hmmmさんはできたということで、完了としたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問