打造SPA
大多数评论将在会议期间提交,有些人不带笔记本电脑。但他们可能有智能手机。创建一个移动应用程序来快速查看会议评论怎么样?
创建这样一个移动应用程序的一种方法是构建一个Javascript单页应用程序(SPA)。SPA在本地运行,可以使用本地存储,可以调用远程HTTP API,还可以利用service worker来创建近乎本地的体验。
要创建移动应用程序,我们将使用提前而且ob娱乐下载Symfony安可.提前是一款小巧高效的粉底,非常适合留言簿水疗。
为了使网站和SPA保持一致,我们将为移动应用程序重用网站的Sass样式表。
控件下创建SPA应用程序水疗中心
目录和复制网站样式表:
请注意水疗中心n>
我们创建了一个公共
目录,因为我们将主要通过浏览器与SPA交互。我们可以给它命名构建
如果我们只想构建一个移动应用程序。
为了更好地衡量,添加一个.gitignore
文件:
.gitignore
1 2 3 4 5 6
/node_modules/ /public/ /npm-debug.log /yarn-error.log #稍后被Cordova /app/使用
初始化package.json
文件(相当于composer.json
JavaScript文件):
现在,添加一些必需的依赖项:
最后一个配置步骤是创建Webpack Encore配置:
webpack.config.js
12 3 4 5 6 7 8 9 10 11 12 13 14
常量水疗中心n>安可=<水疗中心n class="hljs-built_in">需要水疗中心n>(<水疗中心n class="hljs-string">“@ob娱乐下载symfony / webpack-encore”水疗中心n>);<水疗中心n class="hljs-keyword">常量水疗中心n>HtmlWebpackPlugin =<水疗中心n class="hljs-built_in">需要水疗中心n>(<水疗中心n class="hljs-string">“html-webpack-plugin”水疗中心n>);安可.setOutputPath (<水疗中心n class="hljs-string">“公共/”水疗中心n>) .setPublicPath (<水疗中心n class="hljs-string">' / '水疗中心n>) .cleanupOutputBeforeBuild() .addEntry(<水疗中心n class="hljs-string">“应用程序”水疗中心n>,<水疗中心n class="hljs-string">“/ src / app.js。”水疗中心n>) .enablePreactPreset() .enableSingleRuntimeChunk() .addPlugin(<水疗中心n class="hljs-keyword">新水疗中心n>HtmlWebpackPlugin ({<水疗中心n class="hljs-attr">模板水疗中心n>:<水疗中心n class="hljs-string">“src / index.ejs”水疗中心n>,<水疗中心n class="hljs-attr">alwaysWriteToDisk水疗中心n>:<水疗中心n class="hljs-literal">真正的水疗中心n>}));<水疗中心n class="hljs-built_in">模块水疗中心n>.exports = Encore.getWebpackConfig();
是时候创建Preact渲染应用程序的初始模板了:
src / index.ejs
12 3 4 5 6 7 8 9 10 11 12 13 14
<!文档类型<水疗中心n class="hljs-meta-keyword">超文本标记语言水疗中心n>>水疗中心n><<水疗中心n class="hljs-name">超文本标记语言水疗中心n>>水疗中心n><<水疗中心n class="hljs-name">头水疗中心n>>水疗中心n><<水疗中心n class="hljs-name">元水疗中心n>http-equiv水疗中心n>=<水疗中心n class="hljs-string">“内容类型”水疗中心n>内容水疗中心n>=<水疗中心n class="hljs-string">“text / html;charset = utf - 8”水疗中心n>/>水疗中心n><<水疗中心n class="hljs-name">元水疗中心n>http-equiv水疗中心n>=<水疗中心n class="hljs-string">“X-UA-Compatible”水疗中心n>内容水疗中心n>=<水疗中心n class="hljs-string">“IE =边缘”水疗中心n>/>水疗中心n><<水疗中心n class="hljs-name">元水疗中心n>的名字水疗中心n>=<水疗中心n class="hljs-string">“msapplication-tap-highlight”水疗中心n>内容水疗中心n>=<水疗中心n class="hljs-string">“不”水疗中心n>/>水疗中心n><<水疗中心n class="hljs-name">元水疗中心n>的名字水疗中心n>=<水疗中心n class="hljs-string">“视口”水疗中心n>内容水疗中心n>=<水疗中心n class="hljs-string">"user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width"水疗中心n>/>水疗中心n><<水疗中心n class="hljs-name">标题水疗中心n>>水疗中心n>会议留言簿应用<水疗中心n class="hljs-tag"><水疗中心n class="hljs-name">标题水疗中心n>>水疗中心n><水疗中心n class="hljs-name">头水疗中心n>>水疗中心n><<水疗中心n class="hljs-name">身体水疗中心n>>水疗中心n><<水疗中心n class="hljs-name">div水疗中心n>id水疗中心n>=<水疗中心n class="hljs-string">“应用程序”水疗中心n>>水疗中心n><水疗中心n class="hljs-name">div水疗中心n>>水疗中心n><水疗中心n class="hljs-name">身体水疗中心n>>水疗中心n><水疗中心n class="hljs-name">超文本标记语言水疗中心n>>水疗中心n>
的< div >
标签是应用程序将被JavaScript渲染的地方。下面是渲染"Hello World"视图的第一个版本代码:
src / app.js
1 2 3 4 5 6 7 8 9 10 11
Import {h, render} from 'preact';函数App(){返回(你好世界!
}渲染(<应用程序>应用程序>,.getelementbyid(“软件”));
最后一行注册应用程序()
函数在#应用
元素的HTML页面。
一切都准备好了!
由于这个应用程序是独立于主网站的,我们需要运行另一个web服务器:
的——passthru
标志告诉web服务器将所有HTTP请求传递给公共/ index . html
文件(公共/
是web服务器默认的web根目录)。这个页面由Preact应用程序管理,它通过“浏览器”历史记录获取页面来呈现。
编译CSS和JavaScript文件,运行纱
:
在浏览器中打开SPA:
看看我们的hello world SPA:
SPA目前不能处理不同的页面。要实现多个页面,我们需要一个路由器,就像Symfony一样。ob娱乐下载我们要用preact-router.它接受URL作为输入,并匹配Preact组件来显示。
安装preact-router:
为主页创建一个页面(a超前组件):
src /页面/ home.js
1 2 3 4 5 6 7
Import {h} from 'preact';导出默认函数Home() {return (首页
);};
另一个是会议页面:
src /页面/ conference.js
1 2 3 4 5 6 7
Import {h} from 'preact';导出默认函数Conference() {return (会议
);};