Closed gzlock closed 7 years ago
这些页面怎么展示? 用vue前端渲染?还是说纯粹的静态页面?
@hubcarl 服务器渲染页面无非是为了seo,但有些页面没有seo需求,可以用vue前端渲染,免得占用服务器资源 话说,昨晚发现了nuxt就转为学习nuxt了,nuxt可以使用nuxt.render做egg controller最后的页面渲染
好,服务器渲染最重要的是为了首屏的速度,其次是seo, 前端渲染支持也很简单,webpack编译就可以解决,后面我集成进来。目前这个框架骨架是基于实际的项目提炼出来的,不仅仅是服务器渲染,主要包括一下几个特性:
其实在vue,react这种服务器渲染实现,最繁琐的是webpack工程构建搭建(本地开发,测试环境,正式环境,CDN等),保证友好的开发体验和效率以及 render层的缓存优化。这些共性的东西已经分离出egg-webpack, egg-webpack-vue, egg-view-vue, egg-view-vue-ssr 给抽象出来了,开发者无需关心这些。
目前这里实现前端渲染举例是纯粹的webpack编译成html文件,数据通过ajax获取,例子里面是编译到public目录,这样egg项目启动后, 线上应用就可以通过http://{domain}/public/html/index/index.html 形式访问。 本地开发时,如果是通过npm start
启动的,因文件是编译到内存里面,所以是单独启动的webpack server(http://127.0.0.1:9003)服务,访问时通过 http://127.0.0.1:9003/public/html/index/index.html. 当然运行 npm run start-prod
这样就是直接读取本地文件。
页面访问时,数据请求这一块可以通过服务端(node/java)层先获取好,然后把window.__INITIAL_STATE__=业务数据
注入到页面中去,然后vue 初始化获取window.__INITIAL_STATE__
更多信息请看, https://github.com/hubcarl/egg-vue-webpack-boilerplate 的readme的配置说明部分。
使用 npm run build-dev 编译后,public目录里面没有html文件夹啊,再npm run start-prod也访问不到html
@tosim webpack在dev状态下html文件是放入内存文件系统的吧,只有最后prod才会真正的输出html文件到指定的目录
@gzlock npm run build-prod也没有生成
@tosim 使用 npm run build-prod
对应的 npm run start-prod
,应该不是生成相应的 html 文件,而是使用一个 html 文件作为模板,生成 eggjs 下面对应的 view 文件,最后 Render 出来的,你再试试?
@tosim 你是mac系统还是 windows ?
@hubcarl 我是ubuntu系统
npm start 整个项目能跑起来嘛?
可以的
我先调试一下,运行 npm run html 可以前端渲染,你试一下,因为数据我是调用ajax接口服务的,例子是调用不通的,你可以改成你自己的数据服务
好的,我试试,谢谢
@tosim 我刚调整了一下package.json编译脚本,请更新一下代码,如果 node_modules 是昨天装的删掉,重新装一下
如果想单独编译文件到磁盘: npm run build-prod
另外本地开发模式和本地跑线上模式切换时,请先删除config/buildConfig.json 文件, 要不然会出现js,css链接找不到,后面我做一下自动清除功能。
好的,我更新一下,谢谢 @hubcarl
支持同时构建前端和后端渲染,后端和前端ip地址不用分开访问,npm start
后 可以直接http://127.0.0.1:7001/public/client/html/index/index.html ,详细请见 develop分支 build/config.js 配置,简化了配置。
最新html前端渲染支持:
entry: { // 服务端渲染
include: 'app/web/page',
exclude: ['app/web/page/test']
},
html: { // 生成前端渲染html页面
template: 'app/web/view/layout.html',
buildDir: 'html',
include: 'app/web/html',
exclude: []
},
@hubcarl 新的特性要0.7.0版本才有吧? 大概什么时候发布
例如用户的注册、登录、设置三个页面