-
Notifications
You must be signed in to change notification settings - Fork 72
如何编译和部署一个Jigsaw应用
You Haipeng edited this page Sep 6, 2018
·
4 revisions
- 安装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 运行于 RDK 里的;
- 此 Jigsaw APP 运行与 RDK 外的;
这2个部署方式会有不同,下面分开说明。
这个方式部署起来会比较简单,按照如下流程进行:
- 给你的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/
即可;
部署起来会麻烦一些,而且特别灵活,在这里无法一一枚举所有场景。本小结仅以部署在典型的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
参数值第一个和最后一个字符必须是/
,不能省略;
- 部署的目录也随之确定,至于这个目录具体是啥,请查阅ICT的安装手册,最后一级目录名是
至此,你的 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/...;
}
由于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;
}