Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
TiaXu
Advisor
Advisor

之所以写这篇文章,是因为许多开发人员和服务所有者(SO,尤其是国外的)以前没有遇到过这个问题,无法正常部署应用和上线服务。因此,我将罗列一些可以解决该问题的方法,供大家使用和参考。



遇到的问题


当你在本地安装Node.js依赖,或将Node.js应用部署到Cloud Foundry环境时,遇到了超时等错误(例如,如下所示),你尝试ping NPM registry来测试连接性,也失败了:




-----> Building dependencies
Prebuild detected (node_modules already exists)
Rebuilding any native modules
rebuilt dependencies successfully
Installing any new modules (package.json)
Error staging application sbf-sample: timed out after 15 minute(s)


默认情况下,Node.js依赖都是从https://registry.npmjs.org库中下载的,这是一个最常用的公开的NPM registry。当这个NPM registry因为任何理由不可访问和连接时,我们可以通过一些配置来解决这个问题。这属于Node.js相关的开发问题,更多说明可通过谷歌来了解。



变通方法


变通方法 1:实现项目自包含(Self-contained)


在将应用程序部署到Cloud Foundry运行时等云环境时,如果你发现从容器中安装依赖时会出现网络不稳定的情况,则可以尝试实现项目的自包含。这意味着你需要预先将所有依赖下载到本地,然后将它们与你的代码代码一起推到Cloud。


package.json同一目录下, 执行以下命令将所有依赖项安装到node_modules文件夹中:



npm i

然后,你再尝试把项目推至云端。


更多详细信息参考:Vendoring App Dependencies



变通方法 2:切换NPM Registry


当然,你可以直接通过切换NPM registry来解决无法访问npmjs.org的问题。你可以通过以下方式进行配置:





  • 执行NPM命令:



    npm config set registry <registry-url>


    这个方法有一些缺点:





    • 每次切换NPM registry时,你都必须回忆和重新输入正确的NPM registry URL。




    • 该方法忽略了NPM registry的配置选项各有不同,例如用户名和密码。在切换到另一个NPM registry时,也必须更改这些选项。




    • 在部署到云端的情况下,你没有机会执行命令对NPM registry进行配置。对于这种情况,你可以使用下一种方法来配置它。







  • 创建一个.npmrc配置文件并设置NPM registry


    如果在将应用程序部署到Cloud Foundry运行时等云环境时遇到该问题,你可以尝试这种方法。


    在项目或者子模块的根目录下,创建一个.npmrc配置文件,包含以下内容:



    registry=<registry-url>
    @<namespace>:registry=<registry-url>

    Cloud Foundry运行时将自动识别它,并尝试从你所设置的NPM registry仓库中安装依赖。




    注意:





    • 如果你的项目中包含多个Node.js子模块,你需要为每个模块都维护一个.npmrc配置文件。




    • 在将应用推至Cloud之前,请确保.npmrc没有被包含在.cfignore文件中。







  • 配置Cloud Foundry中的manifest.json文件


    通过环境变量npm_config_registry来配置NPM registry。


    例如:



    ---
    applications:
    - name: broker-tia
      memory: 128M
      env:
        npm_config_registry: <registry-url>



  • 使用npmrc工具


    如果你使用过私有的NPM registry,你就会知道在一堆不同的.npmrc文件之间切换和手动管理NPM registry URL的痛苦。别再让这成为问题了!npmrc工具可以解决这个问题。它使你可以非常简单地用一个特定的命名版本来切换你的.npmrc




    更多详细说明,可阅读:https://www.npmjs.com/package/npmrc





你可以根据你的偏好和目的选择合适的NPM registry。例如: