Skip to content

如何编译和部署一个Jigsaw应用

You Haipeng edited this page Sep 6, 2018 · 4 revisions

制作 Jigsaw App

  • 安装nodejs v6.12.x
  • 配置npm镜像,详情
  • 在app目录下执行npm install,下载包依赖
  • 运行 sh node_modules/.bin/ng build -sm -aot -prod --base-href='/rdk/app/xxx/',其中:
    • --base-href为部署后需要访问的url,这个参数如果设置错误,将导致app部署失败,请详细阅读本文的下面章节以获得如何取得正确的值;
    • -sm可以让编译器自动生成source map,这样可以通过浏览器debug代码,建议加上;
    • -aot -prod 值俩参数是编译器的优化开关,在生产环境下运行的代码,请务必加上这2个参数;相反的,debug环境下的代码则不建议加上这2个参数;
    • node --max_old_space_size=4096设置node内存,可以解决构建内存溢出的问题
  • dist下的文件即为最终的产品,应该这样使用这些文件:
    • 如果你在制作版本包:则应该将这里所有文件打进版本包里;
    • 如果你正在制作补丁,则应该将这里所有文件都作为补丁的一部分,用于替换服务器上的相同文件;

部署 Jigsaw App

部署笼统的分为两个方式:

  • 此 Jigsaw APP 运行于 RDK 里的;
  • 此 Jigsaw APP 运行与 RDK 外的;

这2个部署方式会有不同,下面分开说明。

运行于 RDK 里时

这个方式部署起来会比较简单,按照如下流程进行:

  • 给你的app的起个名儿,app的名字必须是一个合法的目录名,并且与系统里其他 RDK APP 名没有冲突即可,可以根据业务特征随意起名,本文假设名字为my-jigsaw-app
  • 名字确定后,部署的目录也随之确定,本例应该将这个app部署到RDK安装目录下的这个位置 app/my-jigsaw-app/web/;
  • 根据RDK的规则,访问这个app的url也随之确定,本例的url为 http://ip:port/rdk/app/my-jigsaw-app/web/index.html;
  • 那么,前文编译时的--base-href参数的值也可以确定,本例的参数值为 /rdk/app/my-jigsaw-app/web/特别注意--base-href参数值第一个和最后一个字符必须是 /,不能省略;
  • 你需要做的唯一事情是文件拷贝或者解压缩,将前文编译得到的dist目录下的文件悉数拷贝到这个RDK安装目录下的这个位置 app/my-jigsaw-app/web/ 即可;

运行于 RDK 外时

部署起来会麻烦一些,而且特别灵活,在这里无法一一枚举所有场景。本小结仅以部署在典型的vmax环境下为例。

你需要做的事情是:

  • 制作一个合法的ICT插件包
    • 这个过程非常麻烦和坑爹,由于包含敏感信息,显然我是不会在这里暴露过多细节的;
    • 最最简单的方式是找一个已有的ICT插件包,然后将原插件名修改为你想要的名字;
    • 本文假设你的ICT插件包名为my-jigsaw-app
  • 插件包名字确定后,许多事情就可以确定了
    • 部署的目录也随之确定,至于这个目录具体是啥,请查阅ICT的安装手册,最后一级目录名是 my-jigsaw-app.war
    • 我们建议你在这个目录下创建一个web目录用于存放你前端的所有文件,那么最终你应该将文件放在这里 .../my-jigsaw-app.war/web/
    • 根据ICT的规则,访问这个app的url也随之确定,本例的url为 http://ip:port/my-jigsaw-app/web/index.html;
    • 前文编译时的--base-href参数的值也可以确定,本例的参数值为 /my-jigsaw-app/web/特别注意--base-href参数值第一个和最后一个字符必须是 /,不能省略;

至此,你的 Jigsaw app 就部署好了。

如果你的服务端不是基于ICT开发,而是其他方式提供的,比如由一个独立进程提供的,那么你还需要做一些NGINX的反向代理配置。

本文假设你的服务端提供的Rest服务都以 my-jigsaw-app 开头

  • 你需要创建一个名字为 xxx_vmax.conf 的文件,其中xxx是任意的;
  • 将这个文件放到vmax安装环境下NGINX所在目录的conf目录下;
  • 这个文件的内容是
location /my-jigsaw-app/ {
    # ... 部分需要替换为你的服务端具体的url了,这里无法确定
    proxy_pass http://ip:port/...;
}

其他

如何解决 Jigsaw APP 中前端自定义路由下,一刷新就出现404错误的问题?

由于ICT的一些约束,自定义路由如果使用H5模式我们至今仍未找到解决方法,因此这里建议将你的自定义路由设置为hash模式:

  • 在你前端代码里,找到路由配置的代码,使用下面方式启用hash模式
RouterModule.forRoot(routerConfig, { useHash: true }),
  • 创建一个名字为 xxx_vmax.conf 的文件,其中xxx是任意的,可以和前文的反向代理放在一起;
  • 将这个文件放到vmax安装环境下NGINX所在目录的conf目录下;
  • 这个文件的内容是
location /rdk/app/my-jigsaw-app/web/ {
    proxy_pass http://ip:port/rdk/app/my-jigsaw-app/web/index.html;
}