【问题标题】:Creating an Angular project in a corporate environment (no Internet)在企业环境中创建 Angular 项目(无 Internet)
【发布时间】:2019-05-13 19:19:49
【问题描述】:

我在公司环境中工作,所有东西都必须通过代理(或隔离)。我们有 Artifactory Pro 来镜像 Maven Central、NPM Registry 和 DockerHub。我们多年来一直在使用 Maven,它的效果非常好。我们最近开始通过 Node.js 和 npm 使用 Angular 进行前端开发。安全要求保持不变。

使用 Angular CLI (ng new my-app) 创建新的 Angular 项目时,会从我们的公司 Artifactory 实例中获取数百个 npm 依赖项,这是预期的。 但是,几分钟后该过程失败并显示以下消息:

[...]

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'

[...]

其他详情

  • Angular CLI:7.1.2
  • 节点:10.13.0
  • 操作系统:win32 x64
  • @angular-devkit/architect: 0.11.2
  • @angular-devkit/core: 7.1.2
  • @angular-devkit/schematics: 7.1.2
  • @schematics/角度:7.1.2
  • @schematics/更新:0.11.2
  • rxjs:6.3.3
  • 打字稿:3.1.6
  • %USERPROFILE%/.npmrc 配置了我们的 Artifactory 实例

Bottom line is: 我希望ng new 从 A 到 Z 遍历我们的 Artifactory,而不是从 Internet 获取东西。错误日志提到设置代理,但该 URL 在我们的公司环境中被阻止。

有什么想法吗?

【问题讨论】:

  • 你在 Windows 上工作吗?如果是这样,您可以使用 cntlm :stackoverflow.com/questions/18569054/npm-behind-ntlm-proxy/… 这是我在工作中使用的。
  • 哪个网址被屏蔽了?你必须把你的代理网址,不能被阻止...
  • "try setting a proxy via HTTP_PROXY" 你试过吗? Node-sass 从 github 下载预构建的二进制文件,这些二进制文件也必须是可访问的(代理)。抱歉,如果您使用 Artifactory,答案很明显——我不熟悉它。伊恩在下面提出了一个很好的建议,但也请注意我的评论。
  • GitHub 绝大多数都可用,但以下 URL(例如)被阻止:github.com/sass/node-sass/releases/download/v4.10.0/… ... 设置代理没有帮助。同样的行为。

标签: node.js angular angular-cli


【解决方案1】:

我看到了问题。 node-sass 安装脚本被硬编码为从 github 获取。

$ npm i --verbose node-sass
   ...
> node scripts/install.js

Downloading binary from https://github.com/sass/node-sass/releases/download/v4.11.0/darwin-x64-64_binding.node

在检查了它试图运行的脚本 (node_modules/node-sass/scripts/install.js) 之后,我确定可以跳过这个额外的下载。它需要机器在本地构建它(一次,在初始安装时),但它应该会有所帮助。

$ SKIP_SASS_BINARY_DOWNLOAD_FOR_CI=true npm i --verbose node-sass

老答案

您可以使用您的.npmrc file 执行此操作。如果您希望它应用于您的所有项目,请将其放在您的用户主目录中(听起来您会想要这个)。

registry=<your registry url>
always-auth=true
_auth=<your auth string>

【讨论】:

  • +1 进行良好的调查。但是请注意,在本地构建 node-sass 需要 windows-build-tools,它会从各地提取 npms、pips 和 gem,并且 本身 可能比预构建的 OP 场景更难安装。
  • 哦。我没想到在 Windows 上会这样。它在 Mac 上构建时不需要任何额外的工具。 :(
  • 在基于 *nix 的系统上的好处。我也假设 OP 使用我自己的系统,但情况可能也并非如此,但考虑到公司之间的差距,我只能假设。
  • 这是一个有趣的解决方法。我们可以利用 Artifactory VCS Repositories 来镜像 GitHub 并将其用作 GitHub 存储库的白名单吗?我们能否让 Angular CLI 引导脚本使用该事实来源而不是硬编码的来源?我的目标是让开发人员的事情尽可能简单。
  • 听起来你在描述原始消息中列出的HTTP_PROXY,是的。您的另一种选择是 fork node-sass,将其发布注册表修改为您自己的,然后将更新二进制 URL 的更改推送到您网络中的某个位置。
猜你喜欢
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多