私有存储库中的 Bluemix 节点构建包和模块

Bluemix node buildpack and modules in private repos

我的 node.js 应用程序使用了一些托管在 git 存储库中的私有共享模块。我在 package.json:

的依赖块中使用如下 git URL
"xxx-accountMgr": "git+ssh://git@github.xxx.ibm.com:xxx/lib-account-mgr.git",

当 "cf push" 在 ssh 上安装 npm 时出现此错误:

npm ERR! git clone --template=/home/vcap/.npm/_git-remotes/_templates --mirror ssh://git@github.xxx.ibm.com/ipaas/lib-account-mgr.git /home/vcap/.npm/_git-remotes/ssh-git-github-xxx-ibm-com-xxx-lib-account-mgr-git-bf65c10c: ssh: Could not resolve hostname github.xxx.ibm.com: Name or service not known

我预料到了这一点,因为我没有在 bluemix 中配置 ssh 密钥。那可能吗?如果没有,从 bluemix 中的私有存储库安装模块的替代方法是什么?

如果您正在下载托管在 Git 上的私有模块,您应该能够使用 https 协议(使用凭据)访问它。

如果这不是您的选择,有一个技巧可以帮助避免这个问题:

1) 将私有模块与您的应用程序打包在一起(在 node_modules 中)

2) 将私有模块移动到 package.json 中的 devDependencies,而不是 dependencies,这样您的本地开发工作流就不会受到影响。

npm install will install dependencies and devDependencies. By default, Bluemix will only install dependencies

第 2 步是必要的,因为即使您将私有 node_modules 与您的应用程序打包在一起,您的应用程序的暂存也会失败,因为 npm 仍会尝试访问您的私有存储库以验证依赖关系。

此外,如果您有一个忽略整个 node_modules 目录的 .cfignore 文件,则必须将其更改为仅忽略 public 模块。

如果私有存储库需要 Github 身份验证才能访问共享 mdoules,Bluemix 将无法访问它们。您可以使用诸如 git clone https://github.com/repo/etc 之类的命令,但这将要求文件无需身份验证即可访问。

另一种方法是在使用 cf push 之前在您的存储库中手动安装文件,以便它们可用。这不是一个很好的解决方案,但它会在短期内解决问题。

这里的问题是 Bluemix 无法返回公司网络,这显然是您的 github 存储库所在的位置。

它与身份验证无关,尽管其他人在这里所说的对于可公开访问的 git 存储库是准确的

这是一个解决方法,对我有用的是使用 npmjs 私有模块。一方面它会起作用,另一方面它真的很容易管理版本和重用代码。当然,您需要进行一些小改动,但完全值得。

  1. 升级您的 npmjs 帐户以使用私有模块:https://www.npmjs.com/private-modules

  2. 在你的电脑上登录npmjs: npm login

  3. 发布您的模块

  4. 将您的 npmrc 文件复制到您的项目中: cp ~/.npmrc /path/to/your/project

  5. npm install your_module --save

  6. 尽情享受吧!

请注意,如果您更改密码,.npmrc 中的令牌将被撤销。

The token is not derived from your password password, but changing your password will invalidate all tokens. The token will be valid until the password is changed. You can also invalidate a single token by logging out on a machine that is logged in with that token.

来源:https://docs.npmjs.com/private-modules/ci-server-config#checking-in-your-npmrc

您也可以使用 cfnpm 模块(https://www.npmjs.com/package/cfnpm),它是为处理 cliud foundry 中的私有包而设计的