SAPUI5 (37)

来源:互联网 发布:股东人数 软件 编辑:程序博客网 时间:2024/06/03 05:08

上一篇介绍使用 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 系统。

参考资料

  • Using Grunt to test your UI5 app locally against SAP Gateway OData Services
原创粉丝点击