I work in a corporate environment where everything must be proxied (or air gapped). We have Artifactory Pro in place to mirror Maven Central, NPM Registry and DockerHub. We have been using Maven for years and it works wonders. We have recently started tackling front-end development with Angular through Node.js and npm. Security requirement remains the same.
When creating a new Angular project using Angular CLI (ng new my-app
), several hundreds of npm dependencies are fetched from our corporate Artifactory instance, which is expected. However, the process fails after a few minutes with the following message:
[...]
CREATE my-app5/e2e/src/app.e2e-spec.ts (299 bytes)
CREATE my-app5/e2e/src/app.po.ts (204 bytes)
npm WARN deprecated circular-json@0.5.9: CircularJSON is in maintenance only, flatted is its successor.
ms)
> node-sass@4.10.0 install C:\dev\angular\my-app5\node_modules\node-sass
> node scripts/install.js
Downloading binary from https://github.com/sass/node-sass/releases/download/v4.10.0/win32-x64-64_binding.node
Cannot download "https://github.com/sass/node-sass/releases/download/v4.10.0/win32-x64-64_binding.node":
getaddrinfo ENOTFOUND github.com github.com:443
Hint: If github.com is not accessible in your location
try setting a proxy via HTTP_PROXY, e.g.
export HTTP_PROXY=http://example.com:1234
or configure npm proxy via
npm config set proxy http://example.com:8080
> node-sass@4.10.0 postinstall C:\dev\angular\my-app5\node_modules\node-sass
> node scripts/build.js
Building: C:\Program Files\nodejs\node.exe C:\dev\angular\my-app5\node_modules\node-gyp\bin\node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
gyp info it worked if it ends with ok
gyp verb cli [ 'C:\\Program Files\\nodejs\\node.exe',
gyp verb cli 'C:\\dev\\angular\\my-app5\\node_modules\\node-gyp\\bin\\node-gyp.js',
gyp verb cli 'rebuild',
gyp verb cli '--verbose',
gyp verb cli '--libsass_ext=',
gyp verb cli '--libsass_cflags=',
gyp verb cli '--libsass_ldflags=',
gyp verb cli '--libsass_library=' ]
gyp info using node-gyp@3.8.0
gyp info using node@10.13.0 | win32 | x64
gyp verb command rebuild []
gyp verb command clean []
gyp verb clean removing "build" directory
gyp verb command configure []
gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
gyp verb `which` failed at getNotFoundError (C:\dev\angular\my-app5\node_modules\which\which.js:13:12)
gyp verb `which` failed at F (C:\dev\angular\my-app5\node_modules\which\which.js:68:19)
gyp verb `which` failed at E (C:\dev\angular\my-app5\node_modules\which\which.js:80:29)
gyp verb `which` failed at C:\dev\angular\my-app5\node_modules\which\which.js:89:16
gyp verb `which` failed at C:\dev\angular\my-app5\node_modules\isexe\index.js:42:5
gyp verb `which` failed at C:\dev\angular\my-app5\node_modules\isexe\windows.js:36:5
gyp verb `which` failed at FSReqWrap.oncomplete (fs.js:154:21)
gyp verb `which` failed python2 { Error: not found: python2
gyp verb `which` failed at getNotFoundError (C:\dev\angular\my-app5\node_modules\which\which.js:13:12)
gyp verb `which` failed at F (C:\dev\angular\my-app5\node_modules\which\which.js:68:19)
gyp verb `which` failed at E (C:\dev\angular\my-app5\node_modules\which\which.js:80:29)
gyp verb `which` failed at C:\dev\angular\my-app5\node_modules\which\which.js:89:16
gyp verb `which` failed at C:\dev\angular\my-app5\node_modules\isexe\index.js:42:5
gyp verb `which` failed at C:\dev\angular\my-app5\node_modules\isexe\windows.js:36:5
gyp verb `which` failed at FSReqWrap.oncomplete (fs.js:154:21)
gyp verb `which` failed stack:
gyp verb `which` failed 'Error: not found: python2\n at getNotFoundError (C:\\dev\\angular\\my-app5\\node_modules\\which\\which.js:13:12)\n at F (C:\\dev\\angular\\my-app5\\node_modules\\which\\which.js:68:19)\n at E (C:\\dev\\angular\\my-app5\\node_modules\\which\\which.js:80:29)\n at C:\\dev\\angular\\my-app5\\node_modules\\which\\which.js:89:16\n at C:\\dev\\angular\\my-app5\\node_modules\\isexe\\index.js:42:5\n at C:\\dev\\angular\\my-app5\\node_modules\\isexe\\windows.js:36:5\n at FSReqWrap.oncomplete (fs.js:154:21)',
gyp verb `which` failed code: 'ENOENT' }
gyp verb check python checking for Python executable "python" in the PATH
gyp verb `which` failed Error: not found: python
gyp verb `which` failed at getNotFoundError (C:\dev\angular\my-app5\node_modules\which\which.js:13:12)
gyp verb `which` failed at F (C:\dev\angular\my-app5\node_modules\which\which.js:68:19)
gyp verb `which` failed at E (C:\dev\angular\my-app5\node_modules\which\which.js:80:29)
gyp verb `which` failed at C:\dev\angular\my-app5\node_modules\which\which.js:89:16
gyp verb `which` failed at C:\dev\angular\my-app5\node_modules\isexe\index.js:42:5
gyp verb `which` failed at C:\dev\angular\my-app5\node_modules\isexe\windows.js:36:5
gyp verb `which` failed at FSReqWrap.oncomplete (fs.js:154:21)
gyp verb `which` failed python { Error: not found: python
gyp verb `which` failed at getNotFoundError (C:\dev\angular\my-app5\node_modules\which\which.js:13:12)
gyp verb `which` failed at F (C:\dev\angular\my-app5\node_modules\which\which.js:68:19)
gyp verb `which` failed at E (C:\dev\angular\my-app5\node_modules\which\which.js:80:29)
gyp verb `which` failed at C:\dev\angular\my-app5\node_modules\which\which.js:89:16
gyp verb `which` failed at C:\dev\angular\my-app5\node_modules\isexe\index.js:42:5
gyp verb `which` failed at C:\dev\angular\my-app5\node_modules\isexe\windows.js:36:5
gyp verb `which` failed at FSReqWrap.oncomplete (fs.js:154:21)
gyp verb `which` failed stack:
gyp verb `which` failed 'Error: not found: python\n at getNotFoundError (C:\\dev\\angular\\my-app5\\node_modules\\which\\which.js:13:12)\n at F (C:\\dev\\angular\\my-app5\\node_modules\\which\\which.js:68:19)\n at E (C:\\dev\\angular\\my-app5\\node_modules\\which\\which.js:80:29)\n at C:\\dev\\angular\\my-app5\\node_modules\\which\\which.js:89:16\n at C:\\dev\\angular\\my-app5\\node_modules\\isexe\\index.js:42:5\n at C:\\dev\\angular\\my-app5\\node_modules\\isexe\\windows.js:36:5\n at FSReqWrap.oncomplete (fs.js:154:21)',
gyp verb `which` failed code: 'ENOENT' }
gyp verb could not find "python". checking python launcher
gyp verb could not find "python". guessing location
gyp verb ensuring that file exists: C:\Python27\python.exe
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 PythonFinder.failNoPython (C:\dev\angular\my-app5\node_modules\node-gyp\lib\configure.js:484:19)
gyp ERR! stack at PythonFinder.<anonymous> (C:\dev\angular\my-app5\node_modules\node-gyp\lib\configure.js:509:16)
gyp ERR! stack at C:\dev\angular\my-app5\node_modules\graceful-fs\polyfills.js:282:31
gyp ERR! stack at FSReqWrap.oncomplete (fs.js:154:21)
gyp ERR! System Windows_NT 10.0.15063
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\dev\\angular\\my-app5\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd C:\dev\angular\my-app5\node_modules\node-sass
gyp ERR! node -v v10.13.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
Build failed with error code: 1
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.2 (node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: abbrev@1.1.1 (node_modules\fsevents\node_modules\abbrev):
npm WARN enoent SKIPPING OPTIONAL DEPENDENCY: ENOENT: no such file or directory, rename 'C:\dev\angular\my-app5\node_modules\fsevents\node_modules\abbrev' -> 'C:\dev\angular\my-app5\node_modules\fsevents\node_modules\.abbrev.DELETE'
[...]
Additional details
- Angular CLI: 7.1.2
- Node: 10.13.0
- OS: win32 x64
- @angular-devkit/architect: 0.11.2
- @angular-devkit/core: 7.1.2
- @angular-devkit/schematics: 7.1.2
- @schematics/angular: 7.1.2
- @schematics/update: 0.11.2
- rxjs: 6.3.3
- typescript: 3.1.6
- %USERPROFILE%/.npmrc has our Artifactory instance configured
Bottom line is:
I would expect ng new
to go through our Artifactory from A to Z, not fetching stuffs from the Internet. Error log mentions setting the proxy, but that URL is blocked in our corporate environment.
Any thoughts?