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