Skip to content
This repository has been archived by the owner on Dec 15, 2022. It is now read-only.

Hacking on Atom Core: Update build requirements to be accurate #630

Merged
merged 11 commits into from Oct 5, 2020

Conversation

DeeDeeG
Copy link
Contributor

@DeeDeeG DeeDeeG commented Jul 3, 2020

Requirements for Contributing Documentation

  • Fill out the template below. Any pull request that does not include enough information to be reviewed in a timely manner may be closed at the maintainers' discretion.
  • The pull request must only contribute documentation (for example, markdown files or API docs). To contribute other changes, you must use a different template. You can see all templates at https://github.com/atom/.github/tree/master/.github/PULL_REQUEST_TEMPLATE.

Description of the Change

Information on required Visual Studio versions and Python versions were out of date, considering that we use newer node-gyp now.

See: https://github.com/nodejs/node-gyp/tree/v5.x/#installation for a more up-to-date reference on the required Visual Studio and Python versions, and other miscellaneous requirements of node-gyp.

I updated "Hacking on Atom Core" to reflect that Python 3 now works (See: atom/atom#20711). Visual Studio 2017 has also been supported by recent node-gyp for quite some time. Relatedly, on Windows 10 the Windows 10 SDK is available, not the Windows 8 SDK. Node v10.12+ is required, and NPM < 6 is no longer supported by the NPM authors, so I updated the documentation to reflect that as well.

Release Notes

N/A (Atom Flight Manual doesn't appear to compile or publish any release notes)

Information on required Visual Studio versions and Python versions
were out of date, considering that we use newer `node-gyp` now.
@DeeDeeG

This comment has been minimized.

@DeeDeeG

This comment has been minimized.

@DeeDeeG DeeDeeG changed the title Hacking on Atom Core: Update Python, Visual Studio info Hacking on Atom Core: Update build requirements to be accurate Jul 3, 2020
@DeeDeeG
Copy link
Contributor Author

DeeDeeG commented Jul 3, 2020

One last thing to note, Python 3 only works with npm v6.12+ https://github.com/npm/cli/blob/latest/CHANGELOG.md#6120-2019-10-08, which was the first version of npm with node-gyp v5.0.5+ https://github.com/nodejs/node-gyp/blob/master/CHANGELOG.md#v505-2019-10-04 which is in turn the earliest version of node-gyp that works with Python 3 "out of the box" (no experimental flags required).

So maybe that npm version requirement for using Python 3 should be explained here in the docs, or to keep it simple, just say Atom requires npm 6.12+.

@DeeDeeG

This comment has been minimized.

* Command Line Tools for [Xcode](https://developer.apple.com/xcode/downloads/) (run `xcode-select --install` to install)

{{/mac}}

{{#windows}}

* Node.js 6.9.4 or later (the architecture of node available to the build system will determine whether you build 32-bit or 64-bit Atom)
* Python v2.7.x
* Node.js 10.12 or later (the architecture of node available to the build system will determine whether you build 32-bit or 64-bit Atom)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We use Node 12 in our CI builds. Shouldn't that be the supported version?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

10 is still an officially supported Long Term Support version for now: https://nodejs.org/about/releases/

(Until the end of April in 2021)

@DeeDeeG
Copy link
Contributor Author

DeeDeeG commented Jul 9, 2020

@darangi, @lkashef:

we (@aminya and I) are trying to work on Atom and polish up all the rough edges for those who want to fork it. This important documentation explaining how to get started with Atom is one of the first things users read when trying to contribute. We would really appreciate if these updates could be reviewed and approved.

These suggested updates are based on our active contributions to Atom, including my work on updating some of Atom's build script Node dependencies, and both of our reading through/running the CI configs. I know them to be accurate. It would be great to get updated docs.

Thanks for considering.

- DeeDeeG

DeeDeeG and others added 2 commits July 9, 2020 06:07
Python 3 will be supported on Windows when atom/atom#20856
or similar gets merged into the atom repository.
This should be a recommended way of getting build tools set up.
It works really well, and is much easier than
a manual install of Visual Studio/C++ tools/Python 2.

It sets them all up for you. I personally wouldn't
recommend any other way to someone I knew.

Co-authored-by: Amin Yahyaabadi <aminyahyaabadi74@gmail.com>
@darangi
Copy link
Contributor

darangi commented Jul 9, 2020

@DeeDeeG and @aminya Thanks for the contribution 🙇‍♂️

We can't provide an accurate timeline but we will definitely put this on our radar and act on it as soon as possible.

@darangi darangi added the triaged label Jul 9, 2020
@DeeDeeG
Copy link
Contributor Author

DeeDeeG commented Jul 9, 2020

More research about which NPM versions are supported:

Briefly: Users with NPM 3.10.7 or newer can bootstrap and build Atom successfully.

(I personally still lean toward recommending folks should use the latest major version of NPM, that is currently NPM 6 (or newer), which is what I did in this PR, but I am open to feedback from the maintainers.)

Research details (click to expand):

Tested on Ubuntu 20.04: Atom can be bootstrapped and built with older NPM all the way back to npm@3.10.7.

This is a little alarming to do, in my opinion, because package-lock.json was introduced in npm@5. So the script/node_modules dependencies are installed with an older dependency tree algorithm without the benefit of the lockfile.

Somehow this still works, at least for bootstrap/build. This doesn't affect the apm/node_modules install or the main/App dependencies in [repo_root]/node_modules. The first step of bootstrapping installs script/ dependencies (including npm@6) with npm@3.10.7. Then the script/node_modules/.bin/npm (npm@6 ) is used to install apm. Then apm (with its built-in Node@10 and NPM@6) installs the main Atom dependencies, including bundled packages such as atom-dark-ui.

So overall the user's NPM isn't used for much, and apparently only needs to be v3.10.7 or greater.

By the way, newer versions of NPM are supposedly much faster to complete an npm install, so users should want to benefit from that by using NPM 5 or newer.

And besides: Node 10.12.0 (the oldest Node we support right now for bootstrap/build) already comes bundled with NPM 6.4.1... It's hard to picture someone running Node 10.12 or newer with an NPM older than that. Users will naturally be on NPM 6 or newer unless they go out of their way to install older NPM.

I'm thinking we should still recommend users use NPM@6 or greater. Older versions aren't supported by the NPM team, for one reason. And for another reason, anything older than NPM@5 won't read the package-lock.json lockfile in script/package-lock.json.

@DeeDeeG
Copy link
Contributor Author

DeeDeeG commented Jul 10, 2020

Research about Visual Studio:

node-gyp 5.x supports Visual Studio 2015, 2017 and 2019, at least officially. (See the CHANGELOG.md. Visual Studio 2019 support was added in node-gyp 5.0.0.)


With the versions of Node we are using, Visual Studio 2013 is no longer supported. If you try to do node-gyp configure --verbose on Node >= 8, you see this message in the log:

not looking for VS2013 as it is only supported up to Node.js 8

@aminya

This comment has been minimized.

Visual Studio 2015, 2017 and 2019 are supported.
Windows 8 SDK or Windows 10 SDK are supported.
Clarified windows-build-tools install instructions.
The latest windows-build-tools will be fine for the foreseeable future
(Even when they default to Visual Studio 2019 some time soon.)
* A `git` command is in your path
* Set the `GYP_MSVS_VERSION` environment variable to the Visual Studio/Build Tools version (`2013` or `2015`) e.g. ``[Environment]::SetEnvironmentVariable("GYP_MSVS_VERSION", "2015", "User")`` in PowerShell (or set it in Windows advanced system settings).
* Set the `GYP_MSVS_VERSION` environment variable to the Visual Studio/Build Tools version (`2015`, `2017`, or `2019`.) e.g. ``[Environment]::SetEnvironmentVariable("GYP_MSVS_VERSION", "2015", "User")`` in PowerShell (or set it in Windows advanced system settings).
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Setting GYP_MSVS_VERSION is usually unnecessary, if you've installed to the default location.

node-gyp has gotten better at locating Visual Studio and its components.

Maybe leave this for the troubleshooting area instead. It's already mentioned there.

@DeeDeeG
Copy link
Contributor Author

DeeDeeG commented Jul 10, 2020

I cannot build Atom using 2019 preview. I believe that's the same as 2019.

I just built Atom with Visual Studio Build Tools 2019 to make sure it works.

Screenshots and text output showing Visual Studio 2019 usage (click to expand)

The "About" screen of Atom 1.50.0-dev-110b05baf x64, on Windows
Visual Studio Build Tools 2019 Installer version 16.6.3, with VS 2019 C++ build tools and Windows 10 SDK components selected

When I do [More] > [Export configuration], I get this:

# .vsconfig
{
  "version": "1.0",
  "components": [
    "Microsoft.VisualStudio.Component.Roslyn.Compiler",
    "Microsoft.Component.MSBuild",
    "Microsoft.VisualStudio.Component.CoreBuildTools",
    "Microsoft.VisualStudio.Workload.MSBuildTools",
    "Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
    "Microsoft.VisualStudio.Component.Windows10SDK.18362"
  ]
}

Here is rebuilding the dummy project "native-module" from apm:

C:\Users\[User]\apm\native-module>npx node-gyp@5 rebuild --verbose
[...]
gyp info using node-gyp@5.1.1
gyp info using node@10.20.1 | win32 | x64
[...]
gyp verb find VS msvs_version not set from command line or npm config
gyp verb find VS VCINSTALLDIR not set, not running in VS Command Prompt
gyp verb find VS checking VS2019 (16.6.30225.117) found at:
gyp verb find VS "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools"
gyp verb find VS - found "Visual Studio C++ core features"
gyp verb find VS - found VC++ toolset: v142
gyp verb find VS - found Windows SDK: 10.0.18362.0
gyp info find VS using VS2019 (16.6.30225.117) found at:
gyp info find VS "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools"
gyp info find VS run with --verbose for detailed information
[...]
gyp verb using MSBuild: C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe
gyp info spawn C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe
[...]
Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:04.48
gyp info ok

@DeeDeeG DeeDeeG marked this pull request as draft July 10, 2020 20:24
Update install instructions for Windows.
* Download Python from https://www.python.org/downloads/.
* For Python 2, be sure to install in the default location, or check "Add Python 2.x to PATH" before installing.
* For Python 3, check "Add Python 3.x to PATH", or change the install path to `[Your_Drive_Letter]:\Python37` e.g. `C:\Python37`, (even if your version of Python 3 isn't 3.7, that's one place where the scripts will look.)
* If python isn't found by the bootstrap script, create a symbolic link to the directory containing `python.exe` using e.g.: `mklink /d %SystemDrive%\Python27 D:\elsewhere\Python27`(Links should be set at either `%SystemDrive%\Python27` or `%SystemDrive%\Python37`, regardless of what version of Python you actually have.)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if this is too much detail. It should be accurate, though.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is ok with me. 👍

@DeeDeeG DeeDeeG marked this pull request as ready for review July 10, 2020 21:23
This is now a dependency "7zip-bin" in `scripts/package.json`.

The script doesn't look for 7-Zip on the system anymore,
so it wouldn't be used even if installed.
This should be the first option. It is recommended by node-gyp and Microsoft.

It is either officially or unofficially developed and maintained by Microsoft themselves.
@sadick254
Copy link
Contributor

@DeeDeeG Thank you for your submission. 🎉

Have you considered all the possible combinations and ensured that all the them work?
It would be really helpful for us to have a list of the combinations you have tried and the results.

@DeeDeeG
Copy link
Contributor Author

DeeDeeG commented Aug 19, 2020

@sadick254 yeah, I can do some testing on this.

There's definitely a lot of "moving parts" so to speak, considering these:

  • Python version
  • Visual Studio version
  • Node version
  • npm version
Research details for which versions of npm, Node, Python and Visual Studio are supported (click to expand):

npm:

Thankfully, the system npm is only used to install the build scripts. The build scripts download a copy of exactly npm 6.14.4. Then that is used to install apm, which also includes an version of npm in the 6.14.x series. (6.14 is the latest npm at the moment, so that's all good.)

After the script/node_modules dependencies are installed, we are running modern npm and modern node-gyp.

Through testing, I have found that npm 3.10.7 is the oldest npm that can install the build scripts, after which the build scripts' own npm 6.14.4 is used.

(Note: Version 3.10 is a really old version of npm, so telling users to use something newer might be a good idea anyway. Only the latest release of npm receives any support or fixes, as far as I can tell.)

in short: npm 3.10.7+ can be used.

Node:

The role of system Node in the bootstrap/build process is to: Run the build scripts and run npm, up to and including installing the scripts/ dependencies, and then installing the apm/ dependencies.

I have found that Node 10.12.0 or newer is required, because two of our script/ dependencies (electron-mksnapshot and electron-chromedriver) use recursive fs.mkdir, which was introduced in Node 10.12.0.

(Note: As far as I can tell, any version of Node can successfully run any version of npm. But the test matrix to test every combination of Node 10.12.0+ and npm 3.10.7+ would be enormous, so sadly I cannot commit to investigating every combination of this.)

In short, Node 10.12.0+ can be used.

Python:

This one is easy for me to confirm.

node-gyp sets our Python requirements. And we get node-gyp as a dependency of npm.

Info and background about node-gyp (click to expand):

npm comes with a native build system for C++ code, which is node-gyp. node-gyp uses Google's gyp ("Generate Your Projects") build system, which is written in python. So, node-gyp needs a python interpreter on the system in order to run. node-gyp sets our Python requirements. (Note: Almost nowhere else in the Node)

The first version of node-gyp to detect and use Python 3 (without having to set some "experimental Python 3" flag at runtime) is node-gyp 5.0.5, as of this PR: nodejs/node-gyp#1910.

They don't allow Python 3 older than 3.5, or older than 2.6... (Note: In upcoming versions of node-gyp, Python 2.6 is dropped and only Python 2.7 is supported in the Python 2 series. This is tentatively expected for npm 7.0).

npm 6.12.0 is the first version to include new enough node-gyp (node-gyp 5.0.5) to detect and support Python 3 out of the box. See the Changelog to confirm: https://github.com/npm/cli/blob/latest/CHANGELOG.md#6120-2019-10-08 (look under "DEPENDENCIES" subheading).

Research findings:

  • The oldest npm that Atom developers can use is npm 3.10.7, see above. In npm 3.10.7, node-gyp 3.4 is included. In node-gyp 3.4, Python 2.5+ (but not Python3) can be used
  • Developers with npm 6.12.0+ can use Python 3.5+ or Python 2.6+.
  • Developers with modern npm less than 6.12 can use Python 2.6+ (no Python 3)
  • Developers with npm 6.12.0+ can use Python 3.5+ or Python 2.6+
  • In the future, when npm 7 is released, Python 2.6 support may be dropped. Developers with npm 7 will need Python 3.5+ or 2.7+

In short: We can say Python 2.7 is supported, and that Python 3.5+ is supported if you have npm 6.12.0 or newer.

Visual Studio version:

Again, this is tied to node-gyp.

Timeline:

(Note: npm bumps their node-gyp dependency somewhat often, so pretty much all versions of node-gyp were picked up by npm at some point.)

In short: We can say Visual Studio 2015 is supported. And Visual Studio 2017 is supported if you have npm 4.5 or newer. And Visual Studio 2019 is supported if you have npm 6.10.1 or newer.

Conclusion:

According to researching the documentation, these versions can be used: Node 10.12+, npm 3.10.7+, Python 2.6/2.7 (Python 3.5+ can be used with recent npm), Visual Studio 2015 (Visual Studio 2017 and 2019 can be used with recent npm).

(Note: Node 12.17 and newer are not usable due to this issue: atom/atom#21091)

I can test some combinations within those ranges and let you know how it goes.

@DeeDeeG
Copy link
Contributor Author

DeeDeeG commented Aug 22, 2020

@sadick254 I've got a big testing "info dump" here. I did some testing with old Node, npm, Visual Studio, and Python.

Node.js tests:

Windows 10 x64

Node 10.11

C:\Users\[User]\Downloads\atom>script\bootstrap --ci
Node:   v10.11.0
Npm:    v6.4.1
Python: v3.8.5
Installing script dependencies
(node:4884) ExperimentalWarning: The fs.promises API is experimental
(node:4884) UnhandledPromiseRejectionWarning: Error: EEXIST: file already
exists, mkdir
'C:\Users\[User]\Downloads\atom\script\node_modules\electron-mksnapshot\bin'
(node:4884) UnhandledPromiseRejectionWarning: Unhandled promise rejection.
This error originated either by throwing inside of an async function
without a catch block, or by rejecting a promise which was not handled with
.catch(). (rejection id: 1)
(node:4884) [DEP0018] DeprecationWarning: Unhandled promise rejections are
deprecated. In the future, promise rejections that are not handled will
terminate the Node.js process with a non-zero exit code.
(node:9840) ExperimentalWarning: The fs.promises API is experimental
(node:9840) UnhandledPromiseRejectionWarning: Error: EEXIST: file already
exists, mkdir
'C:\Users\[User]\Downloads\atom\script\node_modules\electron-chromedriver\bin'
(node:9840) UnhandledPromiseRejectionWarning: Unhandled
 promise rejection. This error originated either by throwing inside of an
async function without a catch block, or by rejecting a promise which was
not handled with .catch(). (rejection id: 1)
(node:9840) [DEP0018] DeprecationWarning: Unhandled promise rejections are
deprecated. In the future, promise rejections that are not handled will
terminate the Node.js process with a non-zero exit code.
added 1324 packages in 554.842s

After:

C:\Users\[User]\Downloads\atom>dir
script\node_modules\electron-chromedriver\bin
 Volume in drive C is Windows
 Volume Serial Number is 0E53-5840

 Directory of
C:\[User]\[User]\Downloads\atom\script\node_modules\electron-chromedriver\bin

08/19/2020  12:19 PM    <DIR>          .
08/19/2020  12:19 PM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  82,790,354,944 bytes free

C:\Users\[User]\Downloads\atom>dir
script\node_modules\electron-mksnapshot\bin
 Volume in drive C is Windows
 Volume Serial Number is 0E53-5840

 Directory of
C:\Users\[User]\Downloads\atom\script\node_modules\electron-mksnapshot\bin

08/19/2020  12:19 PM    <DIR>          .
08/19/2020  12:19 PM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  82,779,025,408 bytes free

Directories are empty. bootstrap script did not download chromedriver
or mksnapshot binaries.

Node 10.12

C:\Users\[User]\Downloads\atom>script\bootstrap --ci
Node:   v10.12.0
Npm:    v6.4.1
Python: v3.8.5
Installing script dependencies
(node:1468) ExperimentalWarning: The fs.promises API is experimental
(node:2740) ExperimentalWarning: The fs.promises API is experimental
added 1324 packages in 496.171s

After:


Ubuntu 20.04 x64

Node 10.11

[user]@[host]:~/atom$ script/bootstrap --ci
Node: v10.11.0
Npm: v6.4.1
Python: v2.7.18rc1
Cleaning /home/[user]/atom/apm/node_modules
Cleaning /home/[user]/atom/node_modules
Cleaning /home/[user]/atom/script/node_modules
Installing script dependencies
(node:135034) ExperimentalWarning: The fs.promises API is experimental
(node:135034) UnhandledPromiseRejectionWarning: Error: EEXIST: file already
exists, mkdir
'/home/[user]/atom/script/node_modules/electron-mksnapshot/bin'
(node:135034) UnhandledPromiseRejectionWarning: Unhandled promise
rejection. This error originated either by throwing inside of an async
function without a catch block, or by rejecting a promise which was not
handled with .catch(). (rejection id: 1)
(node:135034) [DEP0018] DeprecationWarning: Unhandled promise rejections
are deprecated. In the future, promise rejections that are not handled will
terminate the Node.js process with a non-zero exit code.
(node:135068) ExperimentalWarning: The fs.promises API is experimental
(node:135068) UnhandledPromiseRejectionWarning: Error: EEXIST: file already
exists, mkdir
'/home/[user]/atom/script/node_modules/electron-chromedriver/bin'
(node:135068) UnhandledPromiseRejectionWarning: Unhandled promise
rejection. This error originated either by throwing inside of an async
function without a catch block, or by rejecting a promise which was not
handled with .catch(). (rejection id: 1)
(node:135068) [DEP0018] DeprecationWarning: Unhandled promise rejections
are deprecated. In the future, promise rejections that are not handled will
terminate the Node.js process with a non-zero exit code.
added 1324 packages in 148.299s

After:

[user]@[host]:~/atom$ ls script/node_modules/electron-mksnapshot/bin/
[user]@[host]:~/atom$ ls script/node_modules/electron-chromedriver/bin/

Result: No output. bootstrap script did not download chromedriver or
mksnapshot binaries.

Node 10.12

[user]@[host]:~/atom$ script/bootstrap --ci
Node: v10.12.0
Npm: v6.4.1
Python: v2.7.18rc1
Cleaning /home/[user]/atom/apm/node_modules
Cleaning /home/[user]/atom/node_modules
Cleaning /home/[user]/atom/script/node_modules
Installing script dependencies
(node:155074) ExperimentalWarning: The fs.promises API is experimental
(node:155108) ExperimentalWarning: The fs.promises API is experimental
added 1324 packages in 192.318s

After:

[user]@[host]:~/atom$ ls script/node_modules/electron-mksnapshot/bin/
icudtl.dat  libffmpeg.so  LICENSE  mksnapshot    snapshot_blob.bin
 v8_context_snapshot_generator
libEGL.so   libGLESv2.so  LICENSES.chromium.html  natives_blob.bin
 swiftshader
[user]@[host]:~/atom$ ls script/node_modules/electron-chromedriver/bin/
chromedriver  icudtl.dat  LICENSE  LICENSES.chromium.html

Result: chromedriver and mksnapshot binaries were downloaded! Success!

Conclusion: Node less than 10.12 can't build Atom.

npm tests:

Windows 10 x64

npm 3.10.6

C:\Users\[User]\Downloads\atom>script\bootstrap
Node:   v10.12.0
Npm:    v3.10.6
Python: v3.8.5
Installing script dependencies
npm ERR! Windows_NT 10.0.18362
npm ERR! argv
"C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe"
"C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\bin\\npm-cli.js"
"--loglevel=error" "install"
npm ERR! node v10.12.0
npm ERR! npm  v3.10.6
npm ERR! code EMISSINGARG

npm ERR! typeerror Error: Missing required argument #1
npm ERR! typeerror     at andLogAndFinish
(C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\fetch-package-metadata.js:31:3)
npm ERR! typeerror     at fetchPackageMetadata
(C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\fetch-package-metadata.js:51:22)
npm ERR! typeerror     at resolveWithNewModule
(C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\install\deps.js:518:12)
npm ERR! typeerror     at
C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\install\deps.js:519:7
npm ERR! typeerror     at
C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\iferr\index.js:13:50
npm ERR! typeerror     at
C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\fetch-package-metadata.js:37:12
npm ERR! typeerror     at addRequestedAndFinish
(C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\fetch-package-metadata.js:67:5)
npm ERR! typeerror     at returnAndAddMetadata
(C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\fetch-package-metadata.js:121:7)
npm ERR! typeerror     at pickVersionFromRegistryDocument
(C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\fetch-package-metadata.js:146:20)
npm ERR! typeerror     at
C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\iferr\index.js:13:50
npm ERR! typeerror This is an error with npm itself. Please report this
error at:
npm ERR! typeerror     <http://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     C:\Users\[User]\Downloads\atom\script\npm-debug.log
child_process.js:632
    throw err;
    ^

Error: Command failed: npm.cmd --loglevel=error install
npm ERR! Windows_NT 10.0.18362
npm ERR! argv
"C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe"
"C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\bin\\npm-cli.js"
"--loglevel=error" "install"
npm ERR! node v10.12.0
npm ERR! npm  v3.10.6
npm ERR! code EMISSINGARG

npm ERR! typeerror Error: Missing required argument #1
npm ERR! typeerror     at andLogAndFinish
(C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\fetch-package-metadata.js:31:3)
npm ERR! typeerror     at fetchPackageMetadata
(C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\fetch-package-metadata.js:51:22)
npm ERR! typeerror     at resolveWithNewModule
(C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\install\deps.js:518:12)
npm ERR! typeerror     at
C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\install\deps.js:519:7
npm ERR! typeerror     at
C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\iferr\index.js:13:50
npm ERR! typeerror     at
C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\fetch-package-metadata.js:37:12
npm ERR! typeerror     at addRequestedAndFinish
(C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\fetch-package-metadata.js:67:5)
npm ERR! typeerror     at returnAndAddMetadata
(C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\fetch-package-metadata.js:121:7)
npm ERR! typeerror     at pickVersionFromRegistryDocument
(C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\lib\fetch-package-metadata.js:146:20)
npm ERR! typeerror     at
C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\iferr\index.js:13:50
npm ERR! typeerror This is an error with npm itself. Please report this
error at:
npm ERR! typeerror     <http://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     C:\Users\[User]\Downloads\atom\script\npm-debug.log

    at checkExecSyncError (child_process.js:611:11)
    at Object.execFileSync (child_process.js:629:13)
    at module.exports
(C:\Users\[User]\Downloads\atom\script\lib\install-script-dependencies.js:11:16)
    at Object.<anonymous>
(C:\Users\[User]\Downloads\atom\script\bootstrap:37:1)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)

Results: Lots of errors

npm 3.10.7


Ubuntu 20.04 x64

npm 3.10.6

[user]@[host]:~/atom$ script/bootstrap
Node: v10.22.0
Npm: v3.10.6
Python: v2.7.18rc1
Installing script dependencies
npm ERR! Linux 5.4.0-42-generic
npm ERR! argv "/home/[user]/n-prefix/bin/node"
"/home/[user]/n-prefix/bin/npm" "--loglevel=error" "install"
npm ERR! node v10.22.0
npm ERR! npm  v3.10.6
npm ERR! code EMISSINGARG

npm ERR! typeerror Error: Missing required argument #1
npm ERR! typeerror     at andLogAndFinish
(/home/[user]/n-prefix/lib/node_modules/npm/lib/fetch-package-metadata.js:31:3)
npm ERR! typeerror     at fetchPackageMetadata
(/home/[user]/n-prefix/lib/node_modules/npm/lib/fetch-package-metadata.js:51:22)
npm ERR! typeerror     at resolveWithNewModule
(/home/[user]/n-prefix/lib/node_modules/npm/lib/install/deps.js:518:12)
npm ERR! typeerror     at
/home/[user]/n-prefix/lib/node_modules/npm/lib/install/deps.js:519:7
npm ERR! typeerror     at
/home/[user]/n-prefix/lib/node_modules/npm/node_modules/iferr/index.js:13:50
npm ERR! typeerror     at
/home/[user]/n-prefix/lib/node_modules/npm/lib/fetch-package-metadata.js:37:12
npm ERR! typeerror     at addRequestedAndFinish
(/home/[user]/n-prefix/lib/node_modules/npm/lib/fetch-package-metadata.js:67:5)
npm ERR! typeerror     at returnAndAddMetadata
(/home/[user]/n-prefix/lib/node_modules/npm/lib/fetch-package-metadata.js:121:7)
npm ERR! typeerror     at pickVersionFromRegistryDocument
(/home/[user]/n-prefix/lib/node_modules/npm/lib/fetch-package-metadata.js:146:20)
npm ERR! typeerror     at
/home/[user]/n-prefix/lib/node_modules/npm/node_modules/iferr/index.js:13:50
npm ERR! typeerror This is an error with npm itself. Please report this
error at:
npm ERR! typeerror     <http://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     /home/[user]/atom/script/npm-debug.log
child_process.js:650
    throw err;
    ^

Error: Command failed: npm --loglevel=error install
npm ERR! Linux 5.4.0-42-generic
npm ERR! argv "/home/[user]/n-prefix/bin/node"
"/home/[user]/n-prefix/bin/npm" "--loglevel=error" "install"
npm ERR! node v10.22.0
npm ERR! npm  v3.10.6
npm ERR! code EMISSINGARG

npm ERR! typeerror Error: Missing required argument #1
npm ERR! typeerror     at andLogAndFinish
(/home/[user]/n-prefix/lib/node_modules/npm/lib/fetch-package-metadata.js:31:3)
npm ERR! typeerror     at fetchPackageMetadata
(/home/[user]/n-prefix/lib/node_modules/npm/lib/fetch-package-metadata.js:51:22)
npm ERR! typeerror     at resolveWithNewModule
(/home/[user]/n-prefix/lib/node_modules/npm/lib/install/deps.js:518:12)
npm ERR! typeerror     at
/home/[user]/n-prefix/lib/node_modules/npm/lib/install/deps.js:519:7
npm ERR! typeerror     at
/home/[user]/n-prefix/lib/node_modules/npm/node_modules/iferr/index.js:13:50
npm ERR! typeerror     at
/home/[user]/n-prefix/lib/node_modules/npm/lib/fetch-package-metadata.js:37:12
npm ERR! typeerror     at addRequestedAndFinish
(/home/[user]/n-prefix/lib/node_modules/npm/lib/fetch-package-metadata.js:67:5)
npm ERR! typeerror     at returnAndAddMetadata
(/home/[user]/n-prefix/lib/node_modules/npm/lib/fetch-package-metadata.js:121:7)
npm ERR! typeerror     at pickVersionFromRegistryDocument
(/home/[user]/n-prefix/lib/node_modules/npm/lib/fetch-package-metadata.js:146:20)
npm ERR! typeerror     at
/home/[user]/n-prefix/lib/node_modules/npm/node_modules/iferr/index.js:13:50
npm ERR! typeerror This is an error with npm itself. Please report this
error at:
npm ERR! typeerror     <http://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     /home/[user]/atom/script/npm-debug.log

    at checkExecSyncError (child_process.js:629:11)
    at Object.execFileSync (child_process.js:647:13)
    at module.exports
(/home/[user]/atom/script/lib/install-script-dependencies.js:11:16)
    at Object.<anonymous> (/home/[user]/atom/script/bootstrap:37:1)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)

Result: Lots of errors.

npm 3.10.7

[user]@[host]:~/atom$ script/bootstrap
Node: v10.22.0
Npm: v3.10.7
Python: v2.7.18rc1
Installing script dependencies
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit
(node:194056) MaxListenersExceededWarning: Possible EventEmitter memory
leak detected. 11 error listeners added. Use emitter.setMaxListeners() to
increase limit

Result: Lots of warnings, and very slow to install, but all needed
dependencies are installed.

Conclusion: npm less than 3.10.7 can't build Atom.

Visual Studio tests:

Windows 10 x64

Visual Studio 2015

npm 3.10.7 (after doing npm config set --global msvs_version=2015)

Works.

Tested with: Node 10.12.0, npm 3.10.7, Visual Studio 2015.

(Confirmed which Visual Studio was running by opening Task Manager (Ctrl + Shift + Esc), expanding the cmd.exe task running script\bootstrap and script\build, right clicking the "MSBuild.exe" or [some C++ compiler executable here] subprocesses, clicking "Open file location", and confirming that MSBuild from Visual Studio 14.0 or [C++ compiler executable] 14.0 was used. (14.0 is the version number for Visual Studio 2015).

npm 3.10.7 (without doing npm config set --global msvs_version=2015)

Errors.

PS C:\Users\[User]\Downloads\atom> .\script\bootstrapNode:   v10.12.0
Npm:    v4.4.4
Python: v2.7.15
Installing script dependencies
Warning: unrecognized setting VCCLCompilerTool/MultiProcessorCompilation
Warning: unrecognized setting VCCLCompilerTool/MultiProcessorCompilation
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\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\build.js:276:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\Downloads\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.5.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the minidump 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 information on how to open an issue for this project with:
npm ERR!     npm bugs minidump
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls minidump
npm ERR! There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\[User]\AppData\Roaming\npm-cache\_logs\2020-08-21T21_00_46_356Z-debug.log
child_process.js:632
    throw err;
    ^

Error: Command failed: npm.cmd --loglevel=error install
Warning: unrecognized setting VCCLCompilerTool/MultiProcessorCompilation
Warning: unrecognized setting VCCLCompilerTool/MultiProcessorCompilation
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\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\build.js:276:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\Downloads\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.5.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the minidump 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 information on how to open an issue for this project with:
npm ERR!     npm bugs minidump
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls minidump
npm ERR! There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\[User]\AppData\Roaming\npm-cache\_logs\2020-08-21T21_00_46_356Z-debug.log

    at checkExecSyncError (child_process.js:611:11)
    at Object.execFileSync (child_process.js:629:13)
    at module.exports (C:\Users\[User]\Downloads\atom\script\lib\install-script-dependencies.js:11:16)
    at Object.<anonymous> (C:\Users\[User]\Downloads\atom\script\bootstrap:37:1)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
npm 6.10.0 (without npm config set msvs_version=2015)

Error.

PS C:\Users\[User]\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v6.10.0
Python: v2.7.18
Installing script dependencies
Warning: unrecognized setting VCCLCompilerTool/MultiProcessorCompilation
Warning: unrecognized setting VCCLCompilerTool/MultiProcessorCompilation
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\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Windows_NT 10.0.18363
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\[User]\AppData\Roaming\npm-cache\_logs\2020-08-22T20_45_36_992Z-debug.log
child_process.js:632
    throw err;
    ^

Error: Command failed: npm.cmd --loglevel=error install
Warning: unrecognized setting VCCLCompilerTool/MultiProcessorCompilation
Warning: unrecognized setting VCCLCompilerTool/MultiProcessorCompilation
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\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Windows_NT 10.0.18363
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\[User]\AppData\Roaming\npm-cache\_logs\2020-08-22T20_45_36_992Z-debug.log

    at checkExecSyncError (child_process.js:611:11)
    at Object.execFileSync (child_process.js:629:13)
    at module.exports (C:\Users\[User]\atom\script\lib\install-script-dependencies.js:11:16)
    at Object.<anonymous> (C:\Users\[User]\atom\script\bootstrap:37:1)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
npm 6.10.0 (with npm config set msvs_version=2015)

Works. No errors.

PS C:\Users\[User]\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v6.10.0
Python: v2.7.18
Installing script dependencies
Installing apm
npm 6.10.0 (with $env:GYP_MSVS_VERSION=2015 (powershell env var setting))

Works. No errors.

PS C:\Users\[User]\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v6.10.0
Python: v2.7.18
Installing script dependencies
Installing apm
npm 6.10.1

No manual config or env vars needed. Just works.

PS C:\Users\[User]\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v6.10.1
Python: v2.7.18
Installing script dependencies
Installing apm

Visual Studio 2017

npm 3.10.7

Does not work with really old npm. Regardless of doing set GYP_MSVS_VERSION= or npm config set msvs_version=. This is the error message:

PS C:\Users\[User]\Downloads\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v3.10.7
Python: v2.7.15
Installing script dependencies
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:12236) ExperimentalWarning: The fs.promises API is experimental
(node:29348) ExperimentalWarning: The fs.promises API is experimental
Traceback (most recent call last):
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\gyp_main.py", line 16, in <module>
    sys.exit(gyp.script_main())
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 545, in script_main
    return main(sys.argv[1:])
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 538, in main
    return gyp_main(args)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 514, in gyp_main
    options.duplicate_basename_check)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 98, in Load
    generator.CalculateVariables(default_variables, params)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\generator\msvs.py", line 1900, in CalculateVariables
    generator_flags.get('msvs_version', 'auto'))
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\MSVSVersion.py", line 434, in SelectVisualStudioVersion
    versions = _DetectVisualStudioVersions(version_map[version], 'e' in version)
KeyError: '2017'
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\configure.js:305:16)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\Downloads\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm ERR! Windows_NT 10.0.18362
npm ERR! argv "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\bin\\npm-cli.js" "--loglevel=error" "install"
npm ERR! node v10.12.0
npm ERR! npm  v3.10.7
npm ERR! code ELIFECYCLE

npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the minidump 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 information on how to open an issue for this project with:
npm ERR!     npm bugs minidump
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls minidump
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     C:\Users\[User]\Downloads\atom\script\npm-debug.log
child_process.js:632
    throw err;
    ^

Error: Command failed: npm.cmd --loglevel=error install
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:17540) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:12236) ExperimentalWarning: The fs.promises API is experimental
(node:29348) ExperimentalWarning: The fs.promises API is experimental
Traceback (most recent call last):
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\gyp_main.py", line 16, in <module>
    sys.exit(gyp.script_main())
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 545, in script_main
    return main(sys.argv[1:])
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 538, in main
    return gyp_main(args)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 514, in gyp_main
    options.duplicate_basename_check)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 98, in Load
    generator.CalculateVariables(default_variables, params)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\generator\msvs.py", line 1900, in CalculateVariables
    generator_flags.get('msvs_version', 'auto'))
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\MSVSVersion.py", line 434, in SelectVisualStudioVersion
    versions = _DetectVisualStudioVersions(version_map[version], 'e' in version)
KeyError: '2017'
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\configure.js:305:16)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\Downloads\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm ERR! Windows_NT 10.0.18362
npm ERR! argv "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\bin\\npm-cli.js" "--loglevel=error" "install"
npm ERR! node v10.12.0
npm ERR! npm  v3.10.7
npm ERR! code ELIFECYCLE

npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the minidump 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 information on how to open an issue for this project with:
npm ERR!     npm bugs minidump
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls minidump
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     C:\Users\[User]\Downloads\atom\script\npm-debug.log

    at checkExecSyncError (child_process.js:611:11)
    at Object.execFileSync (child_process.js:629:13)
    at module.exports (C:\Users\[User]\Downloads\atom\script\lib\install-script-dependencies.js:11:16)
    at Object.<anonymous> (C:\Users\[User]\Downloads\atom\script\bootstrap:37:1)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
npm 4.4.4

Exact same error as above.

PS C:\Users\[User]\Downloads\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v4.4.4
Python: v2.7.15
Installing script dependencies
Traceback (most recent call last):
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\gyp_main.py", line 16, in <module>
    sys.exit(gyp.script_main())
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 545, in script_main
    return main(sys.argv[1:])
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 538, in main
    return gyp_main(args)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 514, in gyp_main
    options.duplicate_basename_check)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 98, in Load
    generator.CalculateVariables(default_variables, params)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\generator\msvs.py", line 1900, in CalculateVariables
    generator_flags.get('msvs_version', 'auto'))
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\MSVSVersion.py", line 434, in SelectVisualStudioVersion
    versions = _DetectVisualStudioVersions(version_map[version], 'e' in version)
KeyError: '2017'
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\configure.js:308:16)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\Downloads\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.5.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the minidump 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 information on how to open an issue for this project with:
npm ERR!     npm bugs minidump
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls minidump
npm ERR! There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\[User]\AppData\Roaming\npm-cache\_logs\2020-08-21T20_27_09_842Z-debug.log
child_process.js:632
    throw err;
    ^

Error: Command failed: npm.cmd --loglevel=error install
Traceback (most recent call last):
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\gyp_main.py", line 16, in <module>
    sys.exit(gyp.script_main())
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 545, in script_main
    return main(sys.argv[1:])
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 538, in main
    return gyp_main(args)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 514, in gyp_main
    options.duplicate_basename_check)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 98, in Load
    generator.CalculateVariables(default_variables, params)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\generator\msvs.py", line 1900, in CalculateVariables
    generator_flags.get('msvs_version', 'auto'))
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\MSVSVersion.py", line 434, in SelectVisualStudioVersion
    versions = _DetectVisualStudioVersions(version_map[version], 'e' in version)
KeyError: '2017'
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\configure.js:308:16)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\Downloads\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.5.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the minidump 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 information on how to open an issue for this project with:
npm ERR!     npm bugs minidump
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls minidump
npm ERR! There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\[User]\AppData\Roaming\npm-cache\_logs\2020-08-21T20_27_09_842Z-debug.log

    at checkExecSyncError (child_process.js:611:11)
    at Object.execFileSync (child_process.js:629:13)
    at module.exports (C:\Users\[User]\Downloads\atom\script\lib\install-script-dependencies.js:11:16)
    at Object.<anonymous> (C:\Users\[User]\Downloads\atom\script\bootstrap:37:1)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
npm 4.5.0

Just works

PS C:\Users\[User]\Downloads\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v4.5.0
Python: v2.7.15
Installing script dependencies
(node:2852) ExperimentalWarning: The fs.promises API is experimental
(node:21500) ExperimentalWarning: The fs.promises API is experimental
Installing apm
Installing modules done
Wrote Dependencies Fingerprint: C:\Users\[User]\Downloads\atom\node_modules\.dependencies-fingerprint 32216db66d0973058ee687fd60173f7821d149b9

Visual Studio 2019

npm 6.10.0

Errors, regardless of config or env vars.

Without npm config set msvs_version 2019:

PS C:\Users\[User]\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v6.10.0
Python: v2.7.18
Installing script dependencies
gyp ERR! UNCAUGHT EXCEPTION
gyp ERR! stack Error: spawn C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\15.0\Bin\MSBuild.exe ENOENT
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:232:19)
gyp ERR! stack     at onErrorNT (internal/child_process.js:407:16)
gyp ERR! stack     at process._tickCallback (internal/process/next_tick.js:63:19)
gyp ERR! System Windows_NT 10.0.18363
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! This is a bug in `node-gyp`.
gyp ERR! Try to update node-gyp and file an Issue if it does not help:
gyp ERR!     <https://github.com/nodejs/node-gyp/issues>
npm ERR! code ELIFECYCLE
npm ERR! errno 7
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 7
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\[User]\AppData\Roaming\npm-cache\_logs\2020-08-22T18_35_44_994Z-debug.log
child_process.js:632
    throw err;
    ^

Error: Command failed: npm.cmd --loglevel=error install
gyp ERR! UNCAUGHT EXCEPTION
gyp ERR! stack Error: spawn C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\15.0\Bin\MSBuild.exe ENOENT
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:232:19)
gyp ERR! stack     at onErrorNT (internal/child_process.js:407:16)
gyp ERR! stack     at process._tickCallback (internal/process/next_tick.js:63:19)
gyp ERR! System Windows_NT 10.0.18363
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! This is a bug in `node-gyp`.
gyp ERR! Try to update node-gyp and file an Issue if it does not help:
gyp ERR!     <https://github.com/nodejs/node-gyp/issues>
npm ERR! code ELIFECYCLE
npm ERR! errno 7
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 7
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\[User]\AppData\Roaming\npm-cache\_logs\2020-08-22T18_35_44_994Z-debug.log

    at checkExecSyncError (child_process.js:611:11)
    at Object.execFileSync (child_process.js:629:13)
    at module.exports (C:\Users\[User]\atom\script\lib\install-script-dependencies.js:11:16)
    at Object.<anonymous> (C:\Users\[User]\atom\script\bootstrap:37:1)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)

With npm config set msvs_version 2019:

PS C:\Users\[User]\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v6.10.0
Python: v2.7.18
Installing script dependencies
Traceback (most recent call last):
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\gyp_main.py", line 16, in <module>
    sys.exit(gyp.script_main())
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 545, in script_main
    return main(sys.argv[1:])
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 538, in main
    return gyp_main(args)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 514, in gyp_main
    options.duplicate_basename_check)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 98, in Load
    generator.CalculateVariables(default_variables, params)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\generator\msvs.py", line 1916, in CalculateVariables
    generator_flags.get('msvs_version', 'auto'))
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\MSVSVersion.py", line 434, in SelectVisualStudioVersion
    versions = _DetectVisualStudioVersions(version_map[version], 'e' in version)
KeyError: '2019'
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\configure.js:345:16)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Windows_NT 10.0.18363
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\[User]\AppData\Roaming\npm-cache\_logs\2020-08-22T18_37_50_094Z-debug.log
child_process.js:632
    throw err;
    ^

Error: Command failed: npm.cmd --loglevel=error install
Traceback (most recent call last):
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\gyp_main.py", line 16, in <module>
    sys.exit(gyp.script_main())
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 545, in script_main
    return main(sys.argv[1:])
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 538, in main
    return gyp_main(args)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 514, in gyp_main
    options.duplicate_basename_check)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 98, in Load
    generator.CalculateVariables(default_variables, params)
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\generator\msvs.py", line 1916, in CalculateVariables
    generator_flags.get('msvs_version', 'auto'))
  File "C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\MSVSVersion.py", line 434, in SelectVisualStudioVersion
    versions = _DetectVisualStudioVersions(version_map[version], 'e' in version)
KeyError: '2019'
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\configure.js:345:16)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Windows_NT 10.0.18363
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\[User]\AppData\Roaming\npm-cache\_logs\2020-08-22T18_37_50_094Z-debug.log

    at checkExecSyncError (child_process.js:611:11)
    at Object.execFileSync (child_process.js:629:13)
    at module.exports (C:\Users\[User]\atom\script\lib\install-script-dependencies.js:11:16)
    at Object.<anonymous> (C:\Users\[User]\atom\script\bootstrap:37:1)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
npm 6.10.1

No problems. Just works. No manual config or env vars needed.

PS C:\Users\[User]\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v6.10.1
Python: v2.7.18
Installing script dependencies
Installing apm

Conclusions:

  • Visual Studio 2015 works with all npm versions. (But with npm older than 6.10.1, you must do npm config set msvs_version=2015, OR in your environment variables set GYP_MSVS_VERSION=2015.)
  • Visual Studio 2017 works with npm 4.5.0 or newer, no environment variable or config setting needed.
  • Visual Studio 2019 works with npm 6.10.1 or newer, no environment variable or config settings needed.

Python tests:

Ubuntu 20.04 x64

npm 3.10.7

No Python 2, Python 3 available

Doesn't work. Error about "Python" executable can't be found.

[user]@[host]:~/atom$ script/bootstrap
Node:    v10.12.0
Npm:    v3.10.7
Python:    v3.8.2
Installing script dependencies
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:5000) ExperimentalWarning: The fs.promises API is experimental
(node:5012) ExperimentalWarning: The fs.promises API is experimental
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack     at failNoPython (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:449:14)
gyp ERR! stack     at /home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:353:11
gyp ERR! stack     at F (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/which/which.js:69:16)
gyp ERR! stack     at E (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/which/which.js:81:29)
gyp ERR! stack     at /home/[user]/n-prefix/lib/node_modules/npm/node_modules/which/which.js:90:16
gyp ERR! stack     at /home/[user]/n-prefix/lib/node_modules/npm/node_modules/which/node_modules/isexe/index.js:44:5
gyp ERR! stack     at /home/[user]/n-prefix/lib/node_modules/npm/node_modules/which/node_modules/isexe/access.js:8:5
gyp ERR! stack     at FSReqWrap.oncomplete (fs.js:141:20)
gyp ERR! System Linux 5.4.0-42-generic
gyp ERR! command "/home/[user]/n-prefix/bin/node" "/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/[user]/atom/script/node_modules/minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm ERR! Linux 5.4.0-42-generic
npm ERR! argv "/home/[user]/n-prefix/bin/node" "/home/[user]/n-prefix/bin/npm" "install" "--loglevel=error"
npm ERR! node v10.12.0
npm ERR! npm  v3.10.7
npm ERR! code ELIFECYCLE

npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the minidump 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 information on how to open an issue for this project with:
npm ERR!     npm bugs minidump
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls minidump
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/[user]/atom/script/npm-debug.log
child_process.js:632
    throw err;
    ^

Error: Command failed: npm install --loglevel=error
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:4965) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:5000) ExperimentalWarning: The fs.promises API is experimental
(node:5012) ExperimentalWarning: The fs.promises API is experimental
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack     at failNoPython (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:449:14)
gyp ERR! stack     at /home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:353:11
gyp ERR! stack     at F (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/which/which.js:69:16)
gyp ERR! stack     at E (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/which/which.js:81:29)
gyp ERR! stack     at /home/[user]/n-prefix/lib/node_modules/npm/node_modules/which/which.js:90:16
gyp ERR! stack     at /home/[user]/n-prefix/lib/node_modules/npm/node_modules/which/node_modules/isexe/index.js:44:5
gyp ERR! stack     at /home/[user]/n-prefix/lib/node_modules/npm/node_modules/which/node_modules/isexe/access.js:8:5
gyp ERR! stack     at FSReqWrap.oncomplete (fs.js:141:20)
gyp ERR! System Linux 5.4.0-42-generic
gyp ERR! command "/home/[user]/n-prefix/bin/node" "/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/[user]/atom/script/node_modules/minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm ERR! Linux 5.4.0-42-generic
npm ERR! argv "/home/[user]/n-prefix/bin/node" "/home/[user]/n-prefix/bin/npm" "install" "--loglevel=error"
npm ERR! node v10.12.0
npm ERR! npm  v3.10.7
npm ERR! code ELIFECYCLE

npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the minidump 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 information on how to open an issue for this project with:
npm ERR!     npm bugs minidump
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls minidump
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/[user]/atom/script/npm-debug.log

    at checkExecSyncError (child_process.js:611:11)
    at Object.execFileSync (child_process.js:629:13)
    at module.exports (/home/[user]/atom/script/lib/install-script-dependencies.js:11:16)
    at Object.<anonymous> (/home/[user]/atom/script/bootstrap:37:1)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
Python 2 available

Works, no errors.

[user]@[host]:~/atom$ script/bootstrap
Node:    v10.12.0
Npm:    v3.10.7
Python:    v2.7.18rc1
Installing script dependencies
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8110) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit
(node:8145) ExperimentalWarning: The fs.promises API is experimental
(node:8157) ExperimentalWarning: The fs.promises API is experimental
Installing apm

npm 6.11

No Python 2, Python 3 is available

Error, "python" and "python2" executables not found.

[user]@[host]:~/atom$ script/bootstrap
Node:    v10.12.0
Npm:    v6.11.3
Python:    v3.8.2
Installing script dependencies
gyp ERR! find Python
gyp ERR! find Python Python is not set from command line or npm configuration
gyp ERR! find Python Python is not set from environment variable PYTHON
gyp ERR! find Python checking if "python" can be used
gyp ERR! find Python - "python" is not in PATH or produced an error
gyp ERR! find Python checking if "python2" can be used
gyp ERR! find Python - "python2" is not in PATH or produced an error
gyp ERR! find Python
gyp ERR! find Python **********************************************************
gyp ERR! find Python You need to install the latest version of Python 2.7.
gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
gyp ERR! find Python you can try one of the following options:
gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
gyp ERR! find Python   (accepted by both node-gyp and npm)
gyp ERR! find Python - Set the environment variable PYTHON
gyp ERR! find Python - Set the npm configuration variable python:
gyp ERR! find Python   npm config set python "/path/to/pythonexecutable"
gyp ERR! find Python For more information consult the documentation at:
gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
gyp ERR! find Python **********************************************************
gyp ERR! find Python
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Python installation to use
gyp ERR! stack     at PythonFinder.fail (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:303:47)
gyp ERR! stack     at PythonFinder.runChecks (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:132:21)
gyp ERR! stack     at PythonFinder.<anonymous> (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:175:16)
gyp ERR! stack     at PythonFinder.execFileCallback (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:267:16)
gyp ERR! stack     at exithandler (child_process.js:296:5)
gyp ERR! stack     at ChildProcess.errorhandler (child_process.js:308:5)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:238:12)
gyp ERR! stack     at onErrorNT (internal/child_process.js:407:16)
gyp ERR! stack     at process._tickCallback (internal/process/next_tick.js:63:19)
gyp ERR! System Linux 5.4.0-42-generic
gyp ERR! command "/home/[user]/n-prefix/bin/node" "/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/[user]/atom/script/node_modules/minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v5.0.3
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/[user]/.npm/_logs/2020-08-21T21_55_52_334Z-debug.log
child_process.js:632
    throw err;
    ^

Error: Command failed: npm install --loglevel=error
gyp ERR! find Python
gyp ERR! find Python Python is not set from command line or npm configuration
gyp ERR! find Python Python is not set from environment variable PYTHON
gyp ERR! find Python checking if "python" can be used
gyp ERR! find Python - "python" is not in PATH or produced an error
gyp ERR! find Python checking if "python2" can be used
gyp ERR! find Python - "python2" is not in PATH or produced an error
gyp ERR! find Python
gyp ERR! find Python **********************************************************
gyp ERR! find Python You need to install the latest version of Python 2.7.
gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
gyp ERR! find Python you can try one of the following options:
gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
gyp ERR! find Python   (accepted by both node-gyp and npm)
gyp ERR! find Python - Set the environment variable PYTHON
gyp ERR! find Python - Set the npm configuration variable python:
gyp ERR! find Python   npm config set python "/path/to/pythonexecutable"
gyp ERR! find Python For more information consult the documentation at:
gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
gyp ERR! find Python **********************************************************
gyp ERR! find Python
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Python installation to use
gyp ERR! stack     at PythonFinder.fail (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:303:47)
gyp ERR! stack     at PythonFinder.runChecks (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:132:21)
gyp ERR! stack     at PythonFinder.<anonymous> (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:175:16)
gyp ERR! stack     at PythonFinder.execFileCallback (/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/lib/find-python.js:267:16)
gyp ERR! stack     at exithandler (child_process.js:296:5)
gyp ERR! stack     at ChildProcess.errorhandler (child_process.js:308:5)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:238:12)
gyp ERR! stack     at onErrorNT (internal/child_process.js:407:16)
gyp ERR! stack     at process._tickCallback (internal/process/next_tick.js:63:19)
gyp ERR! System Linux 5.4.0-42-generic
gyp ERR! command "/home/[user]/n-prefix/bin/node" "/home/[user]/n-prefix/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/[user]/atom/script/node_modules/minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v5.0.3
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/[user]/.npm/_logs/2020-08-21T21_55_52_334Z-debug.log

    at checkExecSyncError (child_process.js:611:11)
    at Object.execFileSync (child_process.js:629:13)
    at module.exports (/home/[user]/atom/script/lib/install-script-dependencies.js:11:16)
    at Object.<anonymous> (/home/[user]/atom/script/bootstrap:37:1)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
Python 2 available

Works, no errors.

[user]@[host]:~/atom$ script/bootstrap
Node:    v10.12.0
Npm:    v6.11.3
Python:    v2.7.18rc1
Installing script dependencies
(node:9900) ExperimentalWarning: The fs.promises API is experimental
(node:9912) ExperimentalWarning: The fs.promises API is experimental
Installing apm

npm 6.12

No Python 2, Python 3 available

Works. No errors.

[user]@[host]:~/atom$ script/bootstrap
Node:    v10.12.0
Npm:    v6.12.0
Python:    v3.8.2
Installing script dependencies
(node:11548) ExperimentalWarning: The fs.promises API is experimental
(node:11560) ExperimentalWarning: The fs.promises API is experimental
Installing apm
Python 2 available

Also works. No errors.

[user]@[host]:~/atom$ script/bootstrap
Node:    v10.12.0
Npm:    v6.12.0
Python:    v2.7.18rc1
Installing script dependencies
(node:13096) ExperimentalWarning: The fs.promises API is experimental
(node:13108) ExperimentalWarning: The fs.promises API is experimental
Installing apm

Windows 10 x64

npm 6.11

No Python 2, Python 3 is available

Error. THIS VERSION OF PYTHON IS NOT SUPPORTED

PS C:\Users\[User]\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v6.11.3
Python: v3.8.5
Installing script dependencies
gyp ERR! find Python
gyp ERR! find Python Python is not set from command line or npm configuration
gyp ERR! find Python Python is not set from environment variable PYTHON
gyp ERR! find Python checking if "python" can be used
gyp ERR! find Python - executable path is "C:\Users\[User]\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\python.exe"
gyp ERR! find Python - version is "3.8.5"
gyp ERR! find Python - version is 3.8.5 - should be >=2.6.0 <3.0.0
gyp ERR! find Python - THIS VERSION OF PYTHON IS NOT SUPPORTED
gyp ERR! find Python checking if "python2" can be used
gyp ERR! find Python - "python2" is not in PATH or produced an error
gyp ERR! find Python checking if the py launcher can be used to find Python 2
gyp ERR! find Python - "py.exe" is not in PATH or produced an error
gyp ERR! find Python checking if Python is C:\Python27\python.exe
gyp ERR! find Python - "C:\Python27\python.exe" could not be run
gyp ERR! find Python checking if Python is C:\Python37\python.exe
gyp ERR! find Python - "C:\Python37\python.exe" could not be run
gyp ERR! find Python
gyp ERR! find Python **********************************************************
gyp ERR! find Python You need to install the latest version of Python 2.7.
gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
gyp ERR! find Python you can try one of the following options:
gyp ERR! find Python - Use the switch --python="C:\Path\To\python.exe"
gyp ERR! find Python   (accepted by both node-gyp and npm)
gyp ERR! find Python - Set the environment variable PYTHON
gyp ERR! find Python - Set the npm configuration variable python:
gyp ERR! find Python   npm config set python "C:\Path\To\python.exe"
gyp ERR! find Python For more information consult the documentation at:
gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
gyp ERR! find Python **********************************************************
gyp ERR! find Python
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Python installation to use
gyp ERR! stack     at PythonFinder.fail (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\find-python.js:303:47)
gyp ERR! stack     at PythonFinder.runChecks (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\find-python.js:132:21)
gyp ERR! stack     at PythonFinder.<anonymous> (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\find-python.js:221:16)
gyp ERR! stack     at PythonFinder.execFileCallback (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\find-python.js:267:16)
gyp ERR! stack     at exithandler (child_process.js:296:5)
gyp ERR! stack     at ChildProcess.errorhandler (child_process.js:308:5)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:238:12)
gyp ERR! stack     at onErrorNT (internal/child_process.js:407:16)
gyp ERR! stack     at process._tickCallback (internal/process/next_tick.js:63:19)
gyp ERR! System Windows_NT 10.0.18363
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v5.0.3
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\[User]\AppData\Roaming\npm-cache\_logs\2020-08-22T16_51_59_269Z-debug.log
child_process.js:632
    throw err;
    ^

Error: Command failed: npm.cmd --loglevel=error install
gyp ERR! find Python
gyp ERR! find Python Python is not set from command line or npm configuration
gyp ERR! find Python Python is not set from environment variable PYTHON
gyp ERR! find Python checking if "python" can be used
gyp ERR! find Python - executable path is "C:\Users\[User]\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\python.exe"
gyp ERR! find Python - version is "3.8.5"
gyp ERR! find Python - version is 3.8.5 - should be >=2.6.0 <3.0.0
gyp ERR! find Python - THIS VERSION OF PYTHON IS NOT SUPPORTED
gyp ERR! find Python checking if "python2" can be used
gyp ERR! find Python - "python2" is not in PATH or produced an error
gyp ERR! find Python checking if the py launcher can be used to find Python 2
gyp ERR! find Python - "py.exe" is not in PATH or produced an error
gyp ERR! find Python checking if Python is C:\Python27\python.exe
gyp ERR! find Python - "C:\Python27\python.exe" could not be run
gyp ERR! find Python checking if Python is C:\Python37\python.exe
gyp ERR! find Python - "C:\Python37\python.exe" could not be run
gyp ERR! find Python
gyp ERR! find Python **********************************************************
gyp ERR! find Python You need to install the latest version of Python 2.7.
gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
gyp ERR! find Python you can try one of the following options:
gyp ERR! find Python - Use the switch --python="C:\Path\To\python.exe"
gyp ERR! find Python   (accepted by both node-gyp and npm)
gyp ERR! find Python - Set the environment variable PYTHON
gyp ERR! find Python - Set the npm configuration variable python:
gyp ERR! find Python   npm config set python "C:\Path\To\python.exe"
gyp ERR! find Python For more information consult the documentation at:
gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
gyp ERR! find Python **********************************************************
gyp ERR! find Python
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Python installation to use
gyp ERR! stack     at PythonFinder.fail (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\find-python.js:303:47)
gyp ERR! stack     at PythonFinder.runChecks (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\find-python.js:132:21)
gyp ERR! stack     at PythonFinder.<anonymous> (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\find-python.js:221:16)
gyp ERR! stack     at PythonFinder.execFileCallback (C:\Users\[User]\Downloads\node-v10.12.0-win-x64\node_modules\npm\node_modules\node-gyp\lib\find-python.js:267:16)
gyp ERR! stack     at exithandler (child_process.js:296:5)
gyp ERR! stack     at ChildProcess.errorhandler (child_process.js:308:5)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:238:12)
gyp ERR! stack     at onErrorNT (internal/child_process.js:407:16)
gyp ERR! stack     at process._tickCallback (internal/process/next_tick.js:63:19)
gyp ERR! System Windows_NT 10.0.18363
gyp ERR! command "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node.exe" "C:\\Users\\[User]\\Downloads\\node-v10.12.0-win-x64\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\[User]\atom\script\node_modules\minidump
gyp ERR! node -v v10.12.0
gyp ERR! node-gyp -v v5.0.3
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! minidump@0.9.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the minidump@0.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\[User]\AppData\Roaming\npm-cache\_logs\2020-08-22T16_51_59_269Z-debug.log

    at checkExecSyncError (child_process.js:611:11)
    at Object.execFileSync (child_process.js:629:13)
    at module.exports (C:\Users\[User]\atom\script\lib\install-script-dependencies.js:11:16)
    at Object.<anonymous> (C:\Users\[User]\atom\script\bootstrap:37:1)
    at Module._compile (internal/modules/cjs/loader.js:688:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
Python 2 available

No problems. Works.

PS C:\Users\[User]\Downloads\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v6.11.3
Python: v2.7.15
Installing script dependencies
Installing apm

npm 6.12

No Python 2, Python 3 is available

No problems. Works.

PS C:\Users\[User]\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v6.12.0
Python: v3.8.5
Installing script dependencies
Installing apm
Python 2 available

No probems. Works.

PS C:\Users\[User]\atom> .\script\bootstrap
Node:   v10.12.0
Npm:    v6.12.0
Python: v2.7.18
Installing script dependencies
(node:12496) ExperimentalWarning: The fs.promises API is experimental
(node:9448) ExperimentalWarning: The fs.promises API is experimental
Installing apm

** Conclusion: Python 2 works everywhere. Python 3 requires npm 6.12 or newer. **

@DeeDeeG
Copy link
Contributor Author

DeeDeeG commented Aug 22, 2020

Some notes about Python on Windows:

If users have used the windows-build-tools package, that will have installed Python 2.7 for them.

Python 3 from Python.org doesn't install to a nice predictable location by default, nor does it put itself on the PATH by default. You have to configure it to a specific install location OR put it on the PATH. That's why the Microsoft Store version of Python 3 is recommended; It always puts itself on the PATH.) (Not an issue for Python 2.7; the default install location is very predictable for Python 2.7).

In my opinion we should say Python 2.7 is preferred over Python 2.6. (2.6 is not supported, and neither is 2.7, but 2.7 has the more recent bugfixes. And 2.7 will be supported in newer node-gyp going forward, whereas Python 2.6 support will be dropped.)

@DeeDeeG
Copy link
Contributor Author

DeeDeeG commented Aug 22, 2020

If we required npm 6.10.1 or newer, all currently supported (by Microsoft) versions of Visual Studio would be usable with no extra configuration.

If we required npm 6.12 or newer, Python 3 would be usable always, with the caveat that it has to be installed the right way on Windows, or it won't be detected.

I'm a bit inclined to do that so that developers are using the newest tech, and so the instructions in the flight manual can be simpler.

We could update the hard requirements here:

https://github.com/atom/atom/blob/c087fcfb490df22c858e98ade218ffaad5a94e71/script/lib/verify-machine-requirements.js#L31-L47


On another note, we should update the required Node in script/lib/verify-machine-requirements.js to be at least Node 10.12, if not something newer:

https://github.com/atom/atom/blob/c087fcfb490df22c858e98ade218ffaad5a94e71/script/lib/verify-machine-requirements.js#L14-L29

We could maybe set the max Node version at 12.16.x as well, until this issue can be solved: atom/atom#21091

Copy link
Contributor

@aminya aminya left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Visual Studio 2019 does not fully work as mentioned in:
atom-community/atom#117

The failing tests should be fixed before adding it to this document.

Copy link
Contributor

@aminya aminya left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Node version should be fixed to 12.4.0 to prevent the issues mentioned in atom-community/atom#111

There is no point in widening the Node version that is supported. Electron and Node version bumping should not be considered in this document. This is just a document about the "supported build configuration".

@DeeDeeG
Copy link
Contributor Author

DeeDeeG commented Aug 31, 2020

Visual Studio 2019 does not fully work as mentioned in:
atom-community/atom#117

I suppose we can hold back on recommending Visual Studio 2019 for now.

More thoughts on Visual Studio 2019 (click to expand):

I don't fully know whether atom-community/atom#117 is a CI-only issue. I could try to get passing tests locally after building with VisualStudio Build Tools 2019, but it takes quite a long time to run all the tests, and there are timeouts and intermittent failures... I honestly find it hard to ever get a clean passing test run under any circumstances. So I may skip verifying that Visual Studio 2019 works 100% and just not advertise Visual Studio 2019 compatibility. Eventually we will need to cross that bridge, but Visual Studio 2015 is supported into the year 2025, Visual Studio 2017 is supported into the year 2027.

https://docs.microsoft.com/en-us/visualstudio/releases/2019/servicing#support-for-older-versions-of-visual-studio

The Node version should be fixed to 12.4.0 to prevent the issues mentioned in atom-community/atom#111

My research suggests pinning the system Node version is not relevant to the errors reported there. I have passing CI runs (100% tests passing) with system Node 10.12.0 and with 12.16.3.

There is no point in widening the Node version that is supported.

Neither is there any point in artifically limiting our documented supported versions, when they are known working and well-tested and confirmed to work.

Electron and Node version bumping should not be considered in this document.

Users will use what they have on their system. This document is to tell them what will work and what won't.

This is just a document about the "supported build configuration".

Indeed, Node 10 (10.12+) and Node 12.0.0 through 12.16.x are working. We should support all current LTS versions of Node, minus the ones where we know we are incompatible (meaning, we do not support Node <= 10.11, or Node >= 12.17).

https://nodejs.org/en/about/releases/

I am sorry you and Jeff are running into errors in whatever scenarios that cause them, but you have no "steps to reproduce" and I can't reproduce those build failures. Please either narrow down what causes the errors happen, or do clean installs every time (run script/clean before attempting to build Atom). I think if you do script/clean you will find locked down Node versions aren't needed. If that's not the case, then unfortunately more troubleshooting is needed for your specific systems. In general, and following the cleanest install approach possible, with default system configuration, the build "just works" on Node 10 (10.12+) and Node 12 (<= 12.16).

We don't know what exactly causes the erros for you and Jeff, but I believe they are exceptions to the usual, rather than representative of the norm.

More thoughts (click to expand is you want):

We can try to pin versions at our fork, particularly in CI. But this document is about developers at their home/work computers. Pinning the system Node will not help them, and I have seen no compelling evidence to substantiate that it would help, and plenty of evidence to the contrary. (The NODE_MODULE_VERSION error you and Jeff are reporting would not be solved by using Node 12.4.0, by the way. Node 12 and Electron 6 have different ABI versions, so if you build for Node 12.4.0 and run on Electron 6, you would still see the NODE_MODULE_VERSION mismatch error.) Until we have worked out what specifically is causing build failures for you and Jeff, it's an anomaly that should not be generalized out to the full population of potential Atom developers.

As a practical matter: I have been using Node 10.22.0 for the past month or two or so, and it has been working fine. We can pursue whatever we want at our fork, but the documentation for the official project must be based on a higher standard of evidence and quality of research. I have been the only one doing publicly posted research into this, so until you and Jeff can explain what is going on, ruling out various possibilities and narrowing it down to a clean explanation, I have to treat it as just some unknown problem.

Please participate in the troubleshooting. We need to provide specific, sound explanations (supported by some sort of empirical evidence) for the errors you and Jeff are seeing, or it will continue to distract from the project.

Until then I will not support advising all developers to use a locked down version, when documentation and experimentation both show it is not needed, in general. Whatever problems you and Jeff are seeing in specific need to be explained first before we can try to address them. Arbitrary workarounds that seem relevant aren't actually useful if there's no solid logical reason why they should work. That should be reserved for if we were desperately in need of a workaround, but I do clean installs and I have had no need for this workaround at any point in time.

I suggest you and Jeff track down the exact problem or get in the habit of doing clean bootstraps and clean installs (run script/clean first).

@sadick254
Copy link
Contributor

@DeeDeeG I see a lot has been done since I last visited this issue. I will go through the research you have done and read through everything. Thank you so much for all the hard work you have done so far. We really appreciate.

@DeeDeeG
Copy link
Contributor Author

DeeDeeG commented Sep 25, 2020

I'm pretty happy with the edits I've proposed to the documentation.

The main things I am considering changing are:

  • Recommend windows-build-tools@4, because the latest v5 sometimes fails to install.
  • Recommend Visual Studio 2015 or 2017, but NOT 2019. VS 2019 doesn't pass Atom's CI, at least as I've seen so far.
  • Recommend npm 6.12.0 or newer.
    • For simpler documentation, and to avoid having users run into various problems due to not understanding the requirements with older npm, this could be nice... even if technically npm as old as 3.10.7 can be used.

- Suggest installing windows-build-tools v4,
as v5 can hang and fail to install.

- Don't use the `--production` flag to install
windows-build-tools; Not installing devDependencies
is already implied when installing a package by name.
Building Atom with Visual Studio 2019 causes a few CI tests to fail,
so hold off on recommending Visual Studio 2019 for now.
This version of npm includes newer node-gyp,
which is better at automatically detecting Python
(especially Python 3), and also better at 
automatically detecting Visual Studio.
* Download Python from https://www.python.org/downloads/.
* For Python 2, be sure to install in the default location, or check "Add Python 2.x to PATH" before installing.
* For Python 3, check "Add Python 3.x to PATH", or change the install path to `[Your_Drive_Letter]:\Python37` e.g. `C:\Python37`, (even if your version of Python 3 isn't 3.7, that's one place where the scripts will look.)
* If python isn't found by the bootstrap script, create a symbolic link to the directory containing `python.exe` using e.g.: `mklink /d %SystemDrive%\Python27 D:\elsewhere\Python27`(Links should be set at either `%SystemDrive%\Python27` or `%SystemDrive%\Python37`, regardless of what version of Python you actually have.)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is ok with me. 👍

@sadick254 sadick254 merged commit be8ca2d into atom:master Oct 5, 2020
@atom atom deleted a comment Oct 19, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants