\

看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!

\

\\

SAFE栈是一套可以用来构建Web应用程序的F#库。近日,Tomasz Heimowski在F# eXchange 2018大会的一个现场编码环节中介绍了这个栈。他在演讲中说明了创建和部署一个评估应用程序的全部过程。

\\

SAFE栈包括:

\\

  • Suave,一个独立Web服务器库 \\
  • Azure \\
  • Fable,一个F#到Javascript的转译器 \\
  • Elmish,一个受Elm启发的UI库\

开发依赖于.NET SDK 2.0和Nodejs。运行应用程序只需要.NET Core。开始的时候,有一个模板可以用来创建一个基础的应用程序。该应用程序包含示例代码和构建文件。

\\

dotnet new -i SAFE.Template\dotnet new SAFE\build run\

\\

Fable.Elmish提供了面向HTML元素的F#绑定。HTML元素是用F#构建的,可以在编写元素定义时设置事件处理器。

\\

let submit (model : Model) (dispatch : Msg -\u0026gt; unit) =\Button.aFa\[ Button.Color IsPrimary\Button.IsFullwidth\Button.OnClick (fun _ -\u0026gt; dispatch Submit)\Button.IsLoading model.Loading ]\[ str \"Submit\" ]\

\\

SAFE模板还包含webpack用于热加载。Webpack是一个客户端模块打包器。SAFE栈感兴趣的webpack特性是“模块热替换(Hot Module Replacement)”,让应用程序可以替换应用程序的某些部分而不丢失状态。

\\

Fable.Remoting提供了一种在客户端和服务器之间共享接口的方式。它处理在客户端和服务器端的序列化和反序列化。对象定义和服务接口位于一个不同的库中,客户端和服务器端都引用了这个库。

\\

// 定义服务的接口\type IVotingProtocol =\  { getResults : unit -\u0026gt; Async\u0026lt;VotingResults\u0026gt;\  addVote : Vote -\u0026gt; Async\u0026lt;VotingResults\u0026gt; }\\// 客户端代码使用的类型化服务定义\let api : IVotingProtocol =\  Proxy.createWithBuilder\u0026lt;IVotingProtocol\u0026gt; Route.builder\

\\

在服务器端,接口实现是使用面向Suave的Fable.Remoting辅助程序在服务器库中接入的。

\\

let init : WebPart =\let votingProcotol : IVotingProtocol =\  { getResults = getResults\  addVote = addVote }\\// 针对特定实现创建一个WebPart\FableSuaveAdapter.webPartWithBuilderFor votingProcotol Route.builder\

\\

在演讲结束时,应用程序部署到了Azure上。SAFE模板并没有直接与云提供商集成。相反,可以创建一个Docker镜像,然后部署到云提供商,在这个例子中是Azure容器。

\\

GitHub提供了有关SAFE栈的文档和代码样例。

\\

查看英文原文:F# Web Development With the SAFE Stack

使用SAFE栈进行F# Web开发相关推荐

  1. 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? .Net Web开发技术栈...

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? 什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先 ...

  2. 我的第一个web_登陆我的第一个全栈Web开发人员职位

    我的第一个web by Robert Cooper 罗伯特·库珀(Robert Cooper) 登陆我的第一个全栈Web开发人员职位 (Landing My First Full Stack Web ...

  3. .Net Web开发技术栈

    有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什么,怎么系统的学,为此我以我微薄之力总结归纳写了一篇.Net web开发技术栈,以此帮助那些想学,却不知 ...

  4. Web前端技术分享:全栈工程师常用的开发工具

    全栈工程师,也叫全端工程师,是指掌握多种技能,并能利用多种技能独立完成产品的人.全栈工程师熟悉多种开发语言,同时具备前端和后台开发能力,从需求分析,原型设计到产品开发,测试,部署,发布全流程都十分熟悉 ...

  5. python学全栈还是运维_Python全栈学习——Python基础及Web开发

    原标题:Python全栈学习--Python基础及Web开发 在DevOps火热的敏捷行业中,无论是开发还是运维都在互联网快速发布下练就了一身的本领,微服务下的敏捷开发体系及智能运维体系都在实战中逐步 ...

  6. 全栈开发和web开发_全栈开发人员:这是什么,以及如何成为一个完整的开发人员...

    全栈开发和web开发 一个全职的开发人员是各行各业的杰作,也是一个备受追捧的求职者. 标题暗示着知识的广度,这对于人手不足的初创公司和管理复杂应用程序的大公司而言都是无价的. 但是, 术语" ...

  7. 全栈开发和web开发_成为全栈开发人员

    全栈开发和web开发 This popular article has been updated in June 2017 to include modern technologies. 该热门文章已 ...

  8. .Net Web开发技术栈 收藏

    原文:http://www.cnblogs.com/1996V/p/7700087.html#!comments 有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎 ...

  9. Web开发前端、后端与全栈的区别是什么?

    刚入门Web开发者总会听到前端开发.后端开发.全栈开发等岗位描述及相关介绍说明.很多人不清楚前端.后端.全栈到底指的是什么?对应岗位需求是什么?本文主要从三者概念.技术内容要求等角度对前端.后端及全栈 ...

最新文章

  1. Maven命令行使用:mvn clean install(安装)
  2. [How TO]-How to Install Python Pip on Ubuntu 20.04
  3. ubuntu 12.10 笔记
  4. 软件工程师,你的价值在哪里?
  5. seir模型数学建模python_Python改进的SEIR模型
  6. 数据结构实验 8.寻找中位数
  7. oracle decode和case when,竟然where 后可以跟着decode 那也就是 where后可以跟着case when ????...
  8. dependency-track 初始化源码解析
  9. matlab中矩阵运算lu,matlab中矩阵lu分解
  10. 每个人都应该具备点批判性思维
  11. 自组织特征映射神经网络(SOM)
  12. kong_团结的面Kong:国际妇女节
  13. OJ上runtime error报错原因
  14. 用Python做一个游戏辅助脚本,完整编程思路分享
  15. 【图解】给面试官解释TCP的三次握手与四次挥手-Web运用原理及网络基础
  16. 5-36V输入自动升降压PD快充方案图纸30W低成本芯片
  17. unity2D物体朝向并靠近鼠标位置,击退效果
  18. 古龙妙语大全 下 朱近墨
  19. 同花顺股票交易接口的编写POST接口
  20. Hyperionics.HyperSnap.v7.19.00.Incl.Keygen-Lz0

热门文章

  1. [jQuery基础] jQuery案例 -- qq音乐以及初步解决Ajax 跨域问题
  2. 两个有序链表序列的交集
  3. Spring 整合 Mybatis
  4. C语言-输入十进制数转换为二进制数
  5. mysql转移数增删改查_MySql CURD操作(数据的增删改查)
  6. linux mysql降权_怎样将mysql数据库root降权
  7. idou老师教你学Istio 07: 如何用istio实现请求超时管理
  8. 解锁树莓派root账号
  9. Django实现发邮件
  10. 准备 LVM Volume Provider - 每天5分钟玩转 OpenStack(49)