SAPUI5 (37) - 使用 Grunt 实现 Cross Origin 代理

上一篇介绍使用 SAP Web IDE 代理来解决 Cross-origin 问题。如果使用 Eclipse 作为开发工具,可以使用 Simple proxy servlet 来测试,作为 cross-origin 的代理。但 SAP Web IDE 编写的代码,并不能在不做任何修改的情况下运行。为了能较好地实现代码移植,另外一个比较好的方法是使用 Grunt。Grunt 是基于 JavaScript 的自动化工具,可以用于 OpenUI5 的测试运行,实现跨域代理。

环境准备

  1. 安装 Node.js
  2. 使用 npm 工具 ( Node.js 的包管理器 ) 安装 grunt-cli,安装的命令如下:
npm install -g grunt-cli

在 Windows 下,应该以管理员权限来运行该命令。上述命令执行完后,grunt 命令就被加入到你的系统路径中了,以后就可以在任何目录下执行此命令了。

安装 grunt-cli 并不等于安装了 Grunt!Grunt CLI 的任务很简单:调用与 Gruntfile 在同一目录中 Grunt。这样带来的好处是,允许你在同一个系统上同时安装多个版本的 Grunt。

Grunt 工具搭建

Grunt 需要将如下两个文件放置在项目的根目录下面。

  • package.json: 这个文件告知 grunt-cli 需要安装的依赖。
  • Gruntfile: 此文件被命名为 Gruntfile.js 或 Gruntfile.coffee,用来配置或定义任务(task)并加载 Grunt 插件

package.json 文件的内容如下:

{
  "name": "scn-demo-gw-sample",
  "version": "0.0.1",
  "devDependencies": {
    "grunt": "^1.0.1",
    "grunt-connect-proxy": "^0.2.0",
    "grunt-contrib-connect": "^1.0.2",
    "grunt-contrib-watch": "^1.0.0",
    "jit-grunt": "^0.10.0"
  }
}

Gruntfile.js 文件内容如下:

module.exports = function (grunt) {
    'use strict';

    // load grunt plugins
    require('jit-grunt')(grunt, {
        configureProxies: 'grunt-connect-proxy'
    });

    // create config
    grunt.initConfig({

        settings: {
            connect: {
                host: 'localhost',
                port: '9555'
            },
            proxy: {
                host: 'dph01.nodomain',
                port: '8180'
            }
        },

        connect: {
            options: {
                hostname: '<%= settings.connect.host %>',
                port: '<%= settings.connect.port %>',
                livereload: 35729,
                middleware: function (connect, options, defaultMiddleware) {
                    var aMiddlewares = [];
                    aMiddlewares.push(require('grunt-connect-proxy/lib/utils').proxyRequest);
                    aMiddlewares.push(defaultMiddleware);
                    return aMiddlewares;
                }
            },
            connectWebapp: {
                options: {
                    base: ['webapp'],
                    open: true
                }
            },
            proxies: [
                {
                    context: '/resources',
                    host: '<%= settings.proxy.host %>',
                    port: '<%= settings.proxy.port %>',
                    https: false,
                    rewrite: {
                        '/resources': '/sap/public/bc/ui5_ui5/resources'
                    }
                }, {
                    context: '/sap/opu/odata',
                    host: '<%= settings.proxy.host %>',
                    port: '<%= settings.proxy.port %>',
                    https: false
                }
            ]
        },

        watch: {
            options: {
                livereload: true
            },
            watchWebapp: {
                files: ['webapp/**/*']
            }
        }
    });

    // register serve task
    grunt.registerTask('serve', ['configureProxies:server', 'connect:connectWebapp', 'watch:watchWebapp']);

    // register default task
    grunt.registerTask('default', ['serve']);
}

grunt.initConfig 需要根据 SAP 服务器的对外提供 OData service 的 domain 进行修改:

grunt.initConfig({

    settings: {
        connect: {
            host: 'localhost',
            port: '9555'
        },
        proxy: {
            host: 'dph01.nodomain',
            port: '8180'
        }
    },

然后在项目根目录下运行如下命令:

npm install

npm 根据 package.json 文件的依赖,在本地安装相关的插件。

测试 Grunt 服务

项目根目录下,运行 grunt serve 命令,grunt 在本地创建 Web 服务,并代理连接到后端 SAP 系统。

参考资料

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值