nodejs / node-gyp

Node.js native addon build tool
MIT License
9.97k stars 1.8k forks source link

Windows users are not happy. #629

Closed luisrudge closed 8 years ago

luisrudge commented 9 years ago

It all started with this conversation.

As I said, I'm pretty much a newbie and I don't even know what node-gyp does, but what I DO know is that it's a pain to run Windows and install a project with node-gyp as a dependency. Some numbers:

It's bizarre that a nodejs developer needs to install visual studio (even the express edition) in order to be able to work on Windows. Even more bizarre is that I, as a .NET developer with full visual studio installed in my machine still can't download a bunch of projects that use this project.

With that being said, I'd like to know from all of you what should we do to make windows users fall in the pit of success? What are the alternatives? Does Microsoft can solve this in any way?

This issue is fixed (kinda)

@mousetraps pointed that Microsoft is shipping the C++ build tools separately now. Check here

Some updates on this gigantic thread

Absolutely non-official statement that @Microsoft is aware of this issue and seeing what can be done

@mousetraps said that this thread "is high on people's radar" at @Microsoft

Very good Q&A about noge-gyp issues on Windows and why they happen

@dekarguy took the time to answer some questions about what we all are going through

mousetraps commented 9 years ago

Thanks @am11 and @Sogl for the feedback on ISO distribution and the /layout flag! The VC team is looking into both issues.

dukedougal commented 9 years ago

@mousetraps I appreciate your help very much thank you.

Without heroic people such as @mousetraps actually solving these insane problems then the game would just be over.

Fishrock123 commented 9 years ago

If I'm using the wrong version of something then I shouldn't be hit with a wave of cryptic compiler errors.

I agree. There is also literally no way to accurately tell this, as far as I can tell, and from what I've learned from others. :/

rainabba commented 9 years ago

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets(44,5): error MSB8020: The builds tools for v140 (Platform Toolset = 'v140') cannot be found. To build using the v140 build tools, either click the Project menu or right-click the solution, and then select "Update VC++ Projects...". Install v140 to build using the v140 build tools. [C:\COMPANYDATA\WEB\Public\BM\AZPREP-BM-1.4.0_20151106T0945\node_modules\xslt4node\node_modules\java\build\nodejavabridge_bindings.vcxproj]

While trying to npm install a new update, I got the above. Following this thread, I downloaded the RC from @mousetraps above, but when I to uninstall, it fails saying blocked (even tried to reboot just in case it was a previous install issue). Below is the last bit of the log file which I suspect has the answer (looks like it's saying either I need to have something else installed, making me wonder what the point was) or like one of the required downloads is failing during setup.

Any suggestions?

[042C:03C8][2015-11-06T11:12:06]i000: MUX:  Setup update feature is enabled. Evaluating conditions to determine whether to run setup update.
[042C:03C8][2015-11-06T11:12:06]i000: MUX:  Checking http://go.microsoft.com/fwlink/?LinkID=606891 for update.
[042C:03C8][2015-11-06T11:12:08]i000: MUX:  Failed to download the update xml file from http://go.microsoft.com/fwlink/?LinkID=606891 Setup will not be updated.
[042C:03C8][2015-11-06T11:12:08]i052: Condition 'NOT (CurrentOperation = "Uninstall")' evaluates to true.
[042C:03C8][2015-11-06T11:12:08]i052: Condition 'NOT (CurrentOperation = "Uninstall")' evaluates to true.
[042C:03C8][2015-11-06T11:12:08]i052: Condition 'NOT (CurrentOperation = "Uninstall")' evaluates to true.
[042C:03C8][2015-11-06T11:12:08]i052: Condition 'NOT (CurrentOperation = "Uninstall")' evaluates to true.
[042C:03C8][2015-11-06T11:12:08]i052: Condition 'NOT (CurrentOperation = "Uninstall")' evaluates to true.
[042C:03C8][2015-11-06T11:12:08]i052: Condition 'NOT (CurrentOperation = "Uninstall")' evaluates to true.
[042C:03C8][2015-11-06T11:12:08]i052: Condition '(CurrentOperation = "Install") OR (CurrentOperation = "Repair")' evaluates to true.
[042C:03C8][2015-11-06T11:12:08]i000: MUX:  Stop Block: NoApplicableUpdates : Update 1 RC does not apply, or is blocked by another condition on your computer.
[042C:03C8][2015-11-06T11:12:08]i000: MUX:  Detect Completed
[042C:03C8][2015-11-06T11:12:08]i000: MUX:  Wait for View to be loaded
[042C:10A0][2015-11-06T11:12:08]i000: MUX:  Detect Completed, now create view
[042C:03C8][2015-11-06T11:12:09]i000: MUX:  View loaded
[042C:03C8][2015-11-06T11:12:09]i000: MUX:  Stop Block: NoApplicableUpdates : Update 1 RC does not apply, or is blocked by another condition on your computer.
[042C:03C8][2015-11-06T11:12:09]i000: MUX:  Go to Blocker page.
[042C:03C8][2015-11-06T11:12:09]i199: Detect complete, result: 0x0
am11 commented 9 years ago

@dukedougal, I agree with @mousetraps; yours is not a Windows-only issue. node-sass v0.9.6 is not supported for node.js v5 on any platform. During this one year period, we experienced eight node.js module versions updates. In fact, the first version that supported io.js (aka node.js v1.x) was node-sass v2.0.0. Please update to latest version of node-sass (v3.4.1) in order to get more runtime versions support, tons of features in node-sass itself as well as the best Sass language v3x support till date via latest libsass. :)

Since we cannot provide a forward compatible binary due to process.versions.modules changes with current infrastructure of node.js C++ modules, therefore, we fallback to manual build if the suitable readymade binary is not found. v2+ of node-sass was the first to provide the proper fallback to "compile at install-time" mechanism for the new/unknown version of node.js. Unfortunately, that functionality was never backported to node-sass v0x and v1x branches (mostly due to the entire rewrite of binding layer and overall divergence, sprinkled with some procrastination and lack of majority consumers' interest in older version; as 0.9.6 corresponds to obsolete version of libsass so there is no point to invest time there).

Whenever you encounter such a problem, you can always search existing issues in node-sass issue tracker and file a new one if it wasn't reported before. We also have channel on gitter and slack.


@mousetraps, thank you! With this pace, I am sure the higher consumer satisfaction level will be achieved pretty swiftly. :)

dukedougal commented 9 years ago

@am11 how do even update to the latest node-sass? I haven't made any decisions along the way to even install it. I had thought it was controlled by package.json files or something? If I install it, won't I get node.js applications complaining because they want an earlier version?

Again I appreciate the help but when the answer to the question "why isn't it working?" is a long technical explanation, there is a reasonable question to ask about whether the ecosystem architecture is sound. Things should just work.

am11 commented 9 years ago

@dukedougal, the node-sass API also changed between v0.9.6 and v3.4.1. You are right, you cannot just update the node-sass version in C:\Users\username\devel\rubix\package.json and expect it to work right away. You will need to make the call sites to comply with node-sass API changes in your code (or if you are dependent on some node-sass downstream such as gulp-sass or grunt-sass, you will need to upgrade its version and save yourself from updating code every time node-sass API changes). This is a sad fact of life, but I am sure you will find sufficient help from node-sass readme and existing issues to get your project upgraded against latest version of node-sass.

mousetraps commented 9 years ago

@dukedougal @Fishrock123 I agree that Windows or not, the user experience with native module compilation is pretty non-ideal, and luckily there are folks who are making steps towards a better experience with efforts like https://github.com/nodejs/build/issues/151

FWIW while testing the VC++ Build Tools, I wrote a script that runs through a large set of native modules in the npm registry, tries to build them, and saves some info about them like stdout, stderr, etc. (haven't gotten the chance to push the script / results to GH yet, but I'll post here when I do). After running through the script, I started noticing some patterns, have begun establishing common classes of errors, and am working on translating those errors into a more human and actionable language. Granted, it won't be perfect or precise, but hopefully we can use the results of that to provide more actionable resolution recommendations so that people aren't left wading through cryptic compiler errors.

rainabba commented 9 years ago

@mousetraps That sounds like very valuable efforts that will be greatly appreciated at a human level. I love Node.js (LONG time MS shop and came over from .net early 2014) and for the most part, it's an absolute pleasure to work with, but many of these (of MS specific issues) leave me scared I've taken multiple companies in the wrong direction because of something as simple as an error that provides no information and NPM installs are nearly always the source and from there, it seems nearly always a node-gyp compilation issue so work that that and what this thread addresses, stands to make the entire node.js experience substantially better and less frightening :)

dukedougal commented 9 years ago

@rainabba I'm just visiting from the Linux world and it was there that I established my belief that node.js has a major problem with versioning, builds and incompatibility. node.js is a very long way from sunshine and lollipops on non-Windows platforms.

ericgrosse commented 9 years ago

@mousetraps I followed your solution provided in this comment to the letter but now when I try npm install mongoose, I get the following error:

if not defined npm_config_node_gyp (node "C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  else (node  rebuild )
Traceback (most recent call last):
  File "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\gyp\gyp_main.py", line 15, in <module>
    import gyp
ImportError: No module named gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:355:16)
gyp ERR! stack     at emitTwo (events.js:87:13)
gyp ERR! stack     at ChildProcess.emit (events.js:172:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Windows_NT 6.3.9600
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\dev\Pluralsight\Web Development with ExpressJS\node_modules\kerberos
gyp ERR! node -v v4.2.2
gyp ERR! node-gyp -v v3.0.3
gyp ERR! not ok

I've tried re-installing node, putting it in a directory other than Program Files (to avoid a folder name with a space), updating npm, it always gives the same error. Searching for the error isn't particularly helpful because all the solutions given are how to fix a V8 build.

Edit: I tried out @Sogl 's solution outlined here and I get the same error, no module named gyp.

I've even tried updating the gyp folder that throws the error using git clone (outlined here) and modifying the source code of gyp_main.py directly (outlined here), but the error remains.

This is incredibly infuriating because I had this node-gyp error fixed for a few months until the problem resurfaced yesterday.

igorpupkinable commented 9 years ago

@mousetraps Thank you! It works and makes things so much easier. Tested on Windows 10 x64, Node.js 5.0.0 x64, npm 3.3.6 Successfully installed latest versions of:

selenium-webdriver
utf-8-validate
node-sass
phantomjs
bufferutil
renatoargh commented 9 years ago

+1000000000000000000000000000000000000

damibarbieri commented 9 years ago

+1 I have Nodejs 5.0.0 x64, npm 3.3.6 and Win 8.1 x64. Should I try going with Win 10? I already tried lost of possible combiantions of VS, Python & node to make this work. But I obviously never succeeded...

rickmed commented 9 years ago

Hi. Installed the Build Tools 2015 provided by @mousetraps, followed instructions, tried to install selenium-webdriver (node-gyp dependant) and got the error below. Any ideas? (nodejs 4.2.2, npm 3.4, windows 10x64) Thank you!

C:\Users\rickm\AppData\Roaming\npm\node_modules\selenium-webdriver\node_modules\utf-8-validate>if not defined npm_config_node_gyp (node "C:\Users\rickm\AppData\Roaming\npm\node_modules\npm\bin\node-gyp-bin....\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node rebuild ) Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(366,5): warning MSB8003: Could not fi nd WindowsSDKDir variable from the registry. TargetFrameworkVersion or PlatformToolset may be set to an invalid versio n number. [C:\Users\rickm\AppData\Roaming\npm\node_modules\selenium-webdriver\node_modules\utf-8-validate\build\validat ion.vcxproj] validation.cc c:\users\rickm.node-gyp\4.2.2\include\node\uv-win.h(32): fatal error C1083: Cannot open include file: 'winsock2.h': No such file or directory [C:\Users\rickm\AppData\Roaming\npm\node_modules\selenium-webdriver\node_modules\utf-8-validate \build\validation.vcxproj] gyp ERR! build error gyp ERR! stack Error: C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe failed with exit code: 1 gyp ERR! stack at ChildProcess.onExit (C:\Users\rickm\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\build.js:270:23) gyp ERR! stack at emitTwo (events.js:87:13) gyp ERR! stack at ChildProcess.emit (events.js:172:7) gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12) gyp ERR! System Windows_NT 10.0.10240 gyp ERR! command "C:\Program Files\nodejs\node.exe" "C:\Users\rickm\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" "rebuild" gyp ERR! cwd C:\Users\rickm\AppData\Roaming\npm\node_modules\selenium-webdriver\node_modules\utf-8-validate gyp ERR! node -v v4.2.2 gyp ERR! node-gyp -v v3.0.3 gyp ERR! not ok npm WARN install:utf-8-validate@1.2.1 utf-8-validate@1.2.1 install: node-gyp rebuild npm WARN install:utf-8-validate@1.2.1 Exit status 1

ericgrosse commented 9 years ago

Update: I've gotten @mousetraps 's solution here to work on fresh installs of Windows 7 and 8.1 (both 64-bit machines). If you use node v5.0.0, it already comes with npm v3.3.6, which means you don't need to update npm.

igorpupkinable commented 9 years ago

@ricmed205 try to update to the latest npm. If does not help try the latest Node.js I have tested selenium-webdriver. Should be installing fine.

phthong commented 9 years ago

I try @mousetraps 's solution with windows 10 64 bit . Node 0.10.25 , npm 1.3.5 . but it not work

ghost commented 9 years ago

@phthong

but it not work

What didn't work? Which package is failing for you? What is the error you are getting?

@ricmed205, I tried installing selenium-webdriver with node.js 5 and it went well. According to google results, the error you are getting (Cannot open include file: 'winsock2.h') suggests that Windows SDK is not installed or not picking up. I would make sure C:\Program Files (x86)\Microsoft SDKs\Windows Kits and/or C:\Program Files (x86)\Microsoft SDKs\Windows exist and then in cmd issue SET PATH=C:\Program Files (x86)\MSBuild\14.0\BIN;%PATH% followed by npm install selenium-webdriver.

rickmed commented 9 years ago

@jasonwilliams200OK @igorpupkinable I tried with latest nodejs (5), npm (3.4) and windows10x64 with your instructions without luck. I get the same error. I checked that I have installed the windows 10 SDKs. I think the key is this:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(366,5): warning MSB8003: Could not fi nd WindowsSDKDir variable from the registry.

but I don't know how to fix it.

Thank you!

ghost commented 9 years ago

@ricmed205, what do you see in the following locations:

rickmed commented 9 years ago

@jasonwilliams200OK

I don't have C:\Program Files (x86)\Microsoft SDKs\Windows.

I have C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs and then a couple of folders there with some files in there. Is there a specific file I should be looking for?

ghost commented 9 years ago

@ricmed205, sorry the location is C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\um\WinSock2.h. With Windows 10, the C runtime is part of OS. Do you have C:\Program Files (x86)\Windows Kits\10\Include\ directory?

rickmed commented 9 years ago

@jasonwilliams200OK I found WinSock2.h at "C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\um"

ghost commented 9 years ago

@ricmed205, this means your SDK is installed properly. For some reason, the SDK cannot be located on your system. It could be a registry value not set or gyp cannot locate the SDK (https://github.com/nodejs/node-gyp/issues/679#issuecomment-137970103). Before trying the hack for latter one, I would delete node-gyp in home directory: rmdir /s /q %HOMEPATH%\.node-gyp\ and retry installing selenium (that directory you deleted will be re-created). If the problem persists, then try the steps laid by @fresc81.

rickmed commented 9 years ago

I finally got it working checking BOTH windows 10 SDKs and windows 8 SDK (I'm on win10) when installing the 2015 build tools. It seems that somehow the windows 10 SDKs is built on top of the windows 8 SDKs OR the windows 10 SDKs package has a bug that fails to add the correspondent registry values, and my system is simple using the windows 8 SDKs (when I added it later).

Also, I must point out that downloading the 2015 build tools installs a +2gb microsoft visual c++ tools and a 2.12gb development kit (plus the other redistributable packages). So ~4.5gb total files. Not sure the size of the complete VS install and if it is a net gain...

@jasonwilliams200OK thank you for your help! @igorpupkinable too!

ghost commented 9 years ago

@ricmed205, thanks for the info. So the clean steps for Windows 10 are:

  1. Install Windows 7, 8.1 or 10.
  2. Install node.js latest version.
  3. Install Python 2.7.
  4. Install Build Tools and make sure to check Windows 8 SDK.

Then try npm install selenium-webdriver.

If I get a chance, I will prepare three virtual machines with Windows 7, 8.1 and 10 to verify these four steps. If someone else has time, please feel free to take a a lead. If you don't use vagrant, then the virtual machines can be downloaded from https://dev.windows.com/en-us/microsoft-edge/tools/vms/windows/ (these are for web testers but we can install node.js, Python and Build Tools as well).

So ~4.5gb total files. Not sure the size of the complete VS install and if it is a net gain

I think 4.5GB is still less than Express for Desktop, Community or Professional editions of Visual Studio 2015. I think with Express, the size become 6-8GBs. With Community and Professionals, it is around 13GBs (based on the components selection to be installed).

Qix- commented 9 years ago

Chiming in here: Part of this problem is that Microsoft insists on distributing their compilers with their bloated IDE.

ghost commented 9 years ago

@Qix-, news for you: https://github.com/nodejs/node-gyp/issues/629#issuecomment-153196245. Please READ before chiming in here.

Qix- commented 9 years ago

@jasonwilliams200OK that hasn't been true for over a decade. Excuse me for not reading the entire discussion with > 200 very large comments.

ghost commented 9 years ago

@Qix- as far as i know till VS2008, they used to had build tools. They discontinued in VS2010 then bring it back in VS2015. Yeah its weird but its better than the bloated IDE, agree?

luisrudge commented 9 years ago

I just updated the description with an update about the fix

phthong commented 9 years ago

hi @jasonwilliams200OK
I got error :

Traceback (most recent call last): File "C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\gyp\gyp_main.py", line 18, in sys.exit(gyp.script_main()) File "C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gypinit.py", line 534, in script_main return main(sys.argv[1:]) File "C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gypinit.py", line 527, in main return gyp_main(args) File "C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gypinit.py", line 503, in gyp_main options.circular_check) File "C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gypinit.py", line 98, in Load generator.CalculateVariables(default_variables, params) File "C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\generator\msvs.py", line 1798, in CalculateVariables generator_flags.get('msvs_version', 'auto')) File "C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\MSVSVersion.py", line 400, in SelectVisualStudioVersion versions = _DetectVisualStudioVersions(version_map[version], 'e' in version) KeyError: '2015' gyp ERR! configure error gyp ERR! stack Error: gyp failed with exit code: 1 gyp ERR! stack at ChildProcess.onCpExit (C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:337:16) gyp ERR! stack at ChildProcess.EventEmitter.emit (events.js:98:17) gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:797:12) gyp ERR! System Windows_NT 6.2.9200 gyp ERR! command "node" "C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" "rebuild" gyp ERR! cwd D:\Project\Gooddata\test\gdc-client\node_modules\grunt-gd-spriter\node_modules\node-gd gyp ERR! node -v v0.10.25 gyp ERR! node-gyp -v v0.12.2 gyp ERR! not ok

and

npm ERR! node-gd@0.3.5 install: node-gyp rebuild npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the node-gd@0.3.5 install script. npm ERR! This is most likely a problem with the node-gd package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! node-gyp rebuild npm ERR! You can get their info via: npm ERR! npm owner ls node-gd npm ERR! There is likely additional logging output above.

npm ERR! System Windows_NT 6.2.9200 npm ERR! command "C:\Program Files (x86)\nodejs\node.exe" "C:\Program Files (x86)\nodejs\node_modules\npm\bin\npm-cli.js" "install" npm ERR! cwd D:\Project\Gooddata\test\gdc-client npm ERR! node -v v0.10.25 npm ERR! npm -v 1.3.24 npm ERR! code ELIFECYCLE

I think node-gd not support windows is the problem .

thanks

Sogl commented 9 years ago

@luisrudge, My solution also works with 0.x.x versions (only) of Node.js and tested on clean Windows 7/8/10 installations. You can also add it to description.

luisrudge commented 9 years ago

@Sogl Let's stick with node v4+

mousetraps commented 9 years ago

Agreed with @luisrudge. The cpp build sku solution posted also works with node v0.x. Given the amount of contusion around this topic let's just stick with the simplest recommended way (cpp build sku) and one for when VS is already installed rather than trying to complicate things any further. Because if we provide too many options, people are just going to get even more frustrated trying all of them trying to get something to work even though that wasn't actually the issue they were running into. Sent from my Rotary Phone

_____________________________

From: Luís Rudge notifications@github.com Sent: Monday, November 16, 2015 7:48 PM Subject: Re: [node-gyp] Windows users are not happy. (#629) To: nodejs/node-gyp node-gyp@noreply.github.com Cc: Sara Itani itani@outlook.com

@Sogl Let's stick with node v4+

— Reply to this email directly or view it on GitHub.

dukedougal commented 9 years ago

The mess of this thread is now part of the problem.

It would be good if there was a nice well written page summarising the issues and solutions.

luisrudge commented 9 years ago

There's a summary in the first post. What else would you like to see there?


De: dukedougalmailto:notifications@github.com Enviada em: ‎17/‎11/‎2015 08:15 Para: nodejs/node-gypmailto:node-gyp@noreply.github.com Cc: Luís Rudgemailto:luis@luisrudge.net Assunto: Re: [node-gyp] Windows users are not happy. (#629)

The mess of this thread is now part of the problem.

It would be good if there was a nice well written page summarising the issues and solutions.


Reply to this email directly or view it on GitHub: https://github.com/nodejs/node-gyp/issues/629#issuecomment-157327549

ghost commented 9 years ago

@phthong,

The error you are seeing is reported in https://github.com/nodejs/node-gyp/issues/555 and I agree with others to consider updating node.js version to latest in 2 minutes by going to http://nodejs.org and clicking few buttons. In principle, the fix should be in 0.10 branch too, but your 0.10 patch level is 25, while the latest is at patch 40: https://nodejs.org/dist/latest-v0.10.x/.

Will "it work" after I update node.js?

No; you are trying to install package called node-gd which does not support Windows at this point.

It turned out the original repo is https://github.com/taggon/node-gd/ where the development is discontinued. Last Commit was on Aug 17, 2012.

However, there is a "community maintained" fork by @y-a-v-a, which installs with npm install node-gd, but as you can see here, there are some challenges in porting this package, which was originally designed for Unix systems only. One of the challenge I reckon is to enforce the presence of libgd and then locate it, which I imagine @y-a-v-a may want to build from source on installing the package on Windows (and can use same method if the package is missing on Unix). To be able to do that, the first step is to make sure libgd compiles with VS2015, which it doesn't at the moment (so I have opened a pull request https://github.com/libgd/libgd/pull/192, lets see..).

In other words, you can follow the progress on node-gd support at https://github.com/y-a-v-a/node-gd/ as your issue belongs to that specific package.

@luisrudge, thanks for the update. The whole community have got at least one achievement (build tools) by the virtue of this thread of yours. Unfortunately, the road to productivity is paved with people who just can't stop trolling..

Qix- commented 9 years ago

@jasonwilliams200OK May I remind you that snarky or overly emotional responses on Github are generally looked down upon. Github is a place of collaboration. Not everyone is going to have the same background or information as yourself.

Being rude or negatively passive aggressive does not help a conversation and is rather poor sport as Github prides itself in being quite an exceptional community, devoid of insult or lashing out from those above others. Everyone here is here to learn and to grow, together, in a very raw (and yes, often times direct) fashion.

There is no need, and no place, for attitude.

I hope one such as yourself could appreciate this. Let's keep things civil and at the very least professional and respectful, okay? :+1:

MylesBorins commented 9 years ago

@nodejs/documentation do you think we should make an official guide about this?

MylesBorins commented 9 years ago

@mousetraps are the setup instructions you advise in https://github.com/nodejs/node-gyp/issues/629#issuecomment-153196245 a preferred way to setup node? Should we send a PR to the README to update the setup instructions?

togakangaroo commented 9 years ago

@TheAlphaNerd I for one would certainly appreciate some definitive, documented answers (or at least acknowledgements) to the many difficulties of node-gyp. Calling out some of the difficulties explicitly might even produce some solutions or at least be useful to future projects with similar aspirations.

I submitted a series of questions above that @dekarguy has partially answered. I'd really love some in-depth discussion of these.

MylesBorins commented 9 years ago

hey @togakangaroo

so node is actually built using a whole bunch of stuff.

The source is a combination of C++ and JavaScript, with bindings in between the two. The two main libraries used in C++ land a libuv and v8.

libuv is used for doing asynchronus I/O including but not limited to TCP / UDP (web traffic), DNS resolution, and File system events (and a WHOLE BUNCH OF OTHER STUFF).

v8 is a JavaScript engine which is used to execute the JavaScript given to node, I believe it is also used to a degree with memory management but I am not super familiar with it yet.

There are things that are exposes in v8 and in libuv that are not exposed in javascript land. For example the bits you need to do serial port communication. There are also performance benefits in some cases, or native libraries already built in c / c++ that can be wrapped.

Hopefully that helps to answer some of the questions regarding c++. you should start a question in http://github.com/nodejs/help and @ me if you want to talk some more about it, or chat about the python build tool stack

bengl commented 9 years ago

@nodejs/documentation do you think we should make an official guide about this?

I think it would definitely make sense to have some form of this in some form of official docs. It may make sense for it to live here https://nodejs.org/en/download/package-manager/#windows or at least be referenced there, since nearly everyone using Node.js on Windows needs to build a native addon at some point.

MylesBorins commented 9 years ago

Yup I think something in the readme and a reference there on the website

Qix- commented 9 years ago

Definitely would +1 seeing a "How Shit Actually Works" article. The one thing I see among Javascript developers is a completely lapse in understanding of what Javascript is and how it's handled under the hood. Many developers don't know what bindings are, how compilation works, what the difference between a scripting/systems language is, etc.

I think a lot of people are asking questions when they don't have even a basic understanding of how the whole ecosystem works - not their fault, but it's hard to understand how not-straightforward-or-trivial it is.

MylesBorins commented 9 years ago

@Qix- how are you supposed to learn if you don't ask questions?

Qix- commented 9 years ago

@TheAlphaNerd That wasn't my point (I know I worded it weird). My point is a lot of the same questions are being asked because they don't have a basic understanding of the internals. It isn't their fault, but a lot of the questions I see about compilation stem from not knowing how the compilation system works. The fact MSVC is incredibly convoluted and requires a just-right environment doesn't help, either. That's why the terms "easy" gets thrown around for Unix tools because there is little environment setup necessary.

A guide explaining, even at a mid to high level, what gyp is, what it wraps, and what the underlying build system it wraps itself wraps, and what those underlying tools do (compiler/linker/etc.) and even going so far as explaining terminology behind common error messages, etc.

Once people start understanding the concepts of native development, I think we'll see a drop in questions, issues, and frustration, and a rise in quality within the native modules that do exist.

MylesBorins commented 9 years ago

I totally agree with your sentiment.

Maybe if you make an issue over at https://github.com/nodejs/evangelism/issues someone might choose to put some time in. I agree it would be very meaningful.