- 快速开始
- JSX 介绍
- JSX+ 介绍
- 组件
- 事件处理
- 样式设置
- Hooks 介绍
- Driver 介绍
- 容器差异
- 工程介绍
- 目录结构
- 应用配置
- 应用入口
- 生命周期
- 路由管理
- 简介
- 语法约束
- Hooks
- 多端组件开发
- API 使用
- 静态资源引用
- 项目构建配置
- 页面配置
- 使用原生项目配置文件
- Rax 与小程序代码混用
- FAQ
- 更新日志
- 简介
- 环境变量与 Framework
- Weex Style 支持表
- Weex 组件
- Weex 模块
- 页面降级
- JS Service
- Bundle 解析
- 事件与手势
- 事件通信
- Weex 国际化
- Weex 常见问题
- 简介
- Document
- App Shell
- 代码分离
- 保存至桌面
- 渲染节点快照
- 预加载和预渲染
- 页面保活
- 缓存控制
- PHA 介绍
- 快速开始
- 编码指南
- 数据请求
- FaaS 接入: Now
- FaaS 接入: FC
- 与 Node 应用集成
- 数据请求
- 异步编程
- Rax 错误码
- 简介
- Lite 工程
- 云端一体化工程
- 插件配置
- 插件开发
- 插件简介
- build-plugin-rax-app
- build-plugin-rax-component
- build-plugin-rax-multi-pages
- build-plugin-rax-ssr
- build-plugin-rax-compat-react
- rax-plugin-app 0.1.0 升级
- 调试 Web
- 调试小程序
- 加载性能优化
- 渲染性能优化
- 从 Rax 0.x 升级
- 从 React 迁移
- API 概述
- render
- hydrate
- createPortal
- findDOMNode
- setNativeProps
- getElementById
- unmountComponentAtNode
- createElement
- cloneElement
- createFactory
- isValidElement
- Children
- memo
- Fragment
- createRef
- forwardRef
- useState
- useEffect
- useLayoutEffect
- useContext
- useRef
- useCallback
- useMemo
- useReducer
- useImperativeHandle
- PropTypes
- version
- ActionSheet
- Background
- Keyboard
- Animation
- Transition
- Toast
- Alert
- Confirm
- Loading
- Navigate
- ChooseImage
- Image
- Request
- Network
- File
- Env
- Device
- Clipboard
- AppState
- AsyncStorage
- Accelerometer
- 组件概述
- Text
- View
- TextInput
- Link
- Icon
- Image
- Picture
- Video
- ScrollView
- RecyclerView
- Waterfall
- Embed
- Countdown
- Canvas
- RefreshControl
- Slider
- Modal
- Weex JS Service
- Rax 长列表最佳实践
- 如何减小 Bundle Size
- Rax 0.x 开发工具
- Native 知识扫盲
- iOS 无障碍
- Rax 性能最佳实践
- 从零上手 Rax
- Rax v0.6 组件体验升级
- Rax v0.5 建立服务体系
- Rax v0.3 跨端生态建设
- Rax v0.2 基础能力建设
- 2016 淘宝双促中的 Rax
- Why Rax?
FaaS 接入: FC
FC 是指阿里云的函数计算服务。
前置准备
- 安装及配置阿里云的 Serverless 应用部署工具 fun
工程配置
- 初始化 SSR 工程
- 安装 FC 工程插件
build-plugin-rax-fc
npm install build-plugin-rax-fc --save-dev
- 在项目
build.json
中加入插件,示例:
{
"plugins": [
[
"build-plugin-rax-app",
{
"targets": ["web"]
}
],
"build-plugin-rax-multi-pages",
"build-plugin-rax-ssr",
"build-plugin-rax-fc"
]
}
本地调试
完成上一步的插件引入后,执行 npm run start
,即可在本地开启函数的预览服务。
控制台会输入如下信息,URL 对应页面的预览地址。
Compiling...
using template: template.yml
http trigger httpTrigger of ssr-demo-3/home was registered
url: http://localhost:8000/2016-08-15/proxy/ssr-demo/home/
methods: [ 'GET' ]
authType: ANONYMOUS
function compute app listening on port 8000!
如需开启 debug 能力,则可以在 build.json 中,为 fc 插件配置如下参数:
{
"plugins": [
[
"build-plugin-rax-app",
{
"targets": ["web"]
}
],
"build-plugin-rax-ssr",
[
"build-plugin-rax-fc", {
"debug": true,
"debugPort": 9229 // 默认值为 9229
}
]
]
}
项目构建
执行 npm run build
可以对当前项目进行构建,构建产物包括 server
和 web
两部分,位于build
目录下。
构建之前,需在 build.json
中指定 assets 的 publicPath(assets 资源发布到 CDN 后的前缀), Server 端将基于该地址去加载真实的 assets。示例:
{
"plugins": [
//...
],
"publicPath": "https://rax.oss-cn-hangzhou.aliyuncs.com/ssr-hacker-news/"
}
web 构建产物,对应页面的前端资源。
server 构建产物,对应 server 端的执行代码,每一张页面都会被构建为一个单独的函数,可被托管到函数即使平台,用于渲染页面。
函数发布
在进行函数发布,也就是页面的发布之前,首先需要发布前端资源,并指定前端资源的 publicPath。
然后进入到 build/server
目录下,然后借助阿里云的函数部署工具 fun
,就可以完成函数的发布。
cd build/server && fun deploy
您也可以将发布命令,配置到 package.json
中方便重复使用,例如:
{
"name": "ssr-demo",
"author": "rax",
"scripts": {
"build": "build-scripts build",
"start": "build-scripts start",
"deploy": "npm run build && cd build/server && fun deploy"
},
// ...
}
然后基于 npm run deploy
命令进行发布。
using template: template.yml
using region: cn-hangzhou
using accountId: ***********8966
using accessKeyId: ***********Tkk0
using timeout: 60
Waiting for service ssr-demo-3 to be deployed...
Waiting for function home to be deployed...
Waiting for packaging function home code...
The function home has been packaged. A total of 2 files files were compressed and the final size was 23.54 KB
Waiting for HTTP trigger httpTrigger to be deployed...
methods: [ 'GET' ]
url: https://16***********8966.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/ssr-demo-3/home/
function httpTrigger deploy success
function home deploy success
service ssr-demo-3 deploy success
发布完成后,如上面的日志,会生成函数对应的线上地址,接下来您可能还需要:
- 为函数绑定自定义域名
- 或 基于 API Gateway 进行服务管理。
注意事项
单页应用(SPA) 的限制
阿里云的函数预览及发布后的地址,都是以函数名来访问的,所以跟实际期望的页面路由可能并不一致。
函数名对应项目 app.json
中的 routes 配置下的 name
字段。例如,在下面配置中,函数名为 home
,而实际期望的路由地址为 /
。
{
"routes": [
{
"path": "/",
"source": "pages/Home/index",
"name": "home"
}
]
}
对于单页应用,页面间基于 path
进行跳转时,就可能无法匹配到正确的页面。因此,对于 SPA
无强诉求的应用,可以将应用切换为多页应用。具体方式如下:
安装 rax-plugin-multi-pages
插件
npm install build-plugin-rax-multi-pages --save-dev
在项目 build.json
中加入该插件
{
"plugins": [
[
"build-plugin-rax-app",
{
"targets": ["web"]
}
],
"build-plugin-rax-multi-pages",
"build-plugin-rax-ssr",
"build-plugin-rax-fc"
]
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论