做者:陈希章 发表于 2017年12月25日node
经过前面几篇文章,我相信你们对于SharePoint Online的开发有了更加全面的认识,上一篇 介绍的SharePoint Add-in的开发,这种方式最开始是在2013年提出来的,目前仍然是受主流支持,不只仅可用于SharePoint Server,也能够用于SharePoint Online。webpack
与此同时,在2016年,一个新的开发框架浮出水面,它的名字叫作SharePoint Framework,也能够缩写为SPFx。产品组提出这套框架的主要缘由,是由于SharePoint自己是在不断发展,另外很重要的一点也是源自客户和开发人员的反馈——咱们须要有全新的一套框架来从新定义SharePoint 的开发——具体而言,但愿能用更加原生的Web开发技术来实现,而且与SharePoint有更加天然的融合。git
SharePoint Framework这套框架 (https://aka.ms/spfx) ,也基本实现了上面的承诺。这篇文章将带领你们管中窥豹,一探究竟。github
目前在Youtube上面有一个入门系列教程,有条件的朋友能够参考: https://www.youtube.com/watch?v=WX9FL0BjE0I&list=PLR9nK3mnD-OXvSWvS2zglCzz4iplhVrKqweb
目前来讲,SPFx适合下面两个场景的开发npm
ApplicationCustomizers
,为字段提供定制的 FieldCustomizers
,还有为列表或者文档库添加自定义菜单和命令的 CommandSets
若是你是Visual Studio的重度用户,你可能会但愿直接使用Visual Studio来进行SPFx的开发。目前为止,咱们尚未看到内置的模板,但SharePoint PnP提供了一个可供单独下载和安装的版本,请参考 https://marketplace.visualstudio.com/items?itemName=SharePointPnP.SPFxProjectTemplate。gulp
另一个好消息是,你可使用Visual Studio Code 这一款更加轻量级的、跨平台的工具来进行SPFx开发,并且由于SPFx的框架无关性,你可使用你最熟悉的Javascript框架(例如React、Handlebars、Knockout、Angular等)开发。若是你对C#很熟悉,你的经验能够获得复用,由于Visual Studio Code内置了对Typescript的支持。跨域
NodeJS,请必定要下载安装6.x这个版本(https://nodejs.org/dist/latest-v6.x/)。据产品组的声明,目前SPFx在其余版本的NodeJS中运行可能会遇到一些小问题。请安装好以后对照下图确认一下版本信息:浏览器
经过命令 npm install -g yo gulp
安装yeoman和gulp这两个模块安全
安装微软提供的一个项目模板 npm install -g @microsoft/generator-sharepoint
下面我用一个实例,带领你们来体验一下客户端Web Part的开发和部署。请建立一个 spfx-sample
的文件夹,而后运行下面的命令 yo @microsoft/sharepoint
,而后在向导中每一步按照下面的提示进行选择
而后,你可能须要等个几分钟直到项目生成结束,这取决于你所使用的网络。
默认状况下,NodeJS的包是要从国外下载的,由于众所周知的缘由,有时候你可能会感受很是慢。有一个变通的办法是经过修改配置,让它使用国内的镜像。此类的镜像有不少,你可使用
npm config set registry https://registry.npm.taobao.org
,请注意,这样修改后要从新打开命令行窗口才会生效。
其实到这里为止,一个能够运行的WebPart项目已经准备就绪了。SharePoint Framework有一个很神奇的功能,就是支持在本地直接进行调试,不要求你安装SharePoint Server,也不须要你真的拥有SharePoint Online的环境(若是你只是显示内容,不须要涉及到调用SharePoint资源的话),这但是一个很是大的进步了。
但要开始本地调试以前,咱们须要确保有一个用于测试的数字证书,由于SharePoint Framework要求网站的地址必须是支持SSL的。咱们能够经过 gulp trust-dev-cert
这个命令生成一个本地的证书,而且选择信任它。正常状况下,你将会看到一个弹出的窗口,请你确认证书信息,命令正常运行后,会有以下的输出:
接下来经过 gulp serve
这个命令在本地启动一个Workbench文件,用来调试刚才建立的这个WebPart
点击上图中央的加号(+)按钮,而且选择“spfxsample”这个Web Part
而后你会在浏览器中看到一个默认的Web Part被添加进来
点击Web Part左上角的笔形图标,在页面的右侧会出现一个属性面板,而后我能够修改Description的信息,它会当即显示在WebPart的界面上,以下图所示
看起来怎么样,是否是挺神奇的?更神奇的事情还在后面呢。假设我已经有了一个SharePoint Online的网站,我想在它里面直接去调试这个WebPart,我能够简单的这样作:
https://microsoftapc.sharepoint.com/teams/Samplesiteforares
/_layouts/15/workbench.aspx
,在浏览器中访问这个地址后,你将看到一个跟刚才那个本地调试界面很相似的页面这是真实的一个在服务器端的页面,由于它是能够直接访问到SharePoint当前上下文的。(此处略),并且你在添加WebPart的时候,会看到不少在服务器才有的WebPart
在Other里面有咱们刚才开发的“spfxsample”,添加后,你能够像以前本地操做同样设置属性,查看页面的变化
上面的这个调试的功能,真是广大SharePoint 开发人员求之不得的吧,反正我是这么想的:本地不须要任何环境,就能够直接调试,甚至能直接在远程站点页面上面调试,多酷啊。
若是调试完成后,接下来就是真正部署起来,毕竟咱们总不可能要求用户都去经过 /_layouts/15/workbench.aspx
这样的地址来访问吧。
首先,咱们须要经过 gulp bundle
命令将当前项目进行生成捆绑
打包以后,经过gulp package-solution
生成解决方案包
而后,你能够在项目的以下目录 sharepoint\solution
中找到一个sppkg文件
你可能会以为gulp是一个无所不能的神器。事实上,它真的是。
在咱们以前建立好的“应用程序目录网站”上面,能够将这个包上传上去
若是你对如何建立“应用程序目录网站” 不太清楚,能够参考 这篇文章
请注意,这里显示的地址仍然是 https://localhost:4321
而后你在测试网站中,就能够添加这个应用程序了
请等待应用程序安装完成
在当前站点,新建一个网页,在编辑网页的时候,能找到此前咱们建立的WebPart
关于具体的使用,跟此前本地调试时是同样的
一切看起来都很完美,可是要注意,上面这种部署方式,其实咱们的应用仍是在本地运行的,因此你要确保运行了gulp serve
,不然会报错。
可是,这显然也是不现实的。咱们固然须要把这个应用部署在服务器,相似于SharPoint Add-in的那种所谓的Provider-Hosted模式。可是,在SharePoint Framework中,它支持将你的项目成果发布到SharePoint中去,它会用CDN(内容分发网络)帮助你托管,这样就不存在外部网址,以及由此产生的跨域访问等问题了。
要确保当前网站是否支持SharePoint CDN,你须要有Office 365全局管理员或者SharePoint 管理员的身份,而且按照下面的提示安装好相关的PowerShell管理工具。
https://www.microsoft.com/en-us/download/details.aspx?id=35588
打开SharePoint Online Management Shell,运行 Connect-SPOService https://m365x810646-admin.sharepoint.com
链接到你的SharePoint Online管理中心。
而后,运行 Get-SPOTenantCdnEnabled -CdnType public
确认当前租户是否支持CDN功能。若是是False,则继续执行 Set-SPOTenantCdnEnabled -CdnType public
,而后再提示问题时输入a,执行脚本
接下来,咱们就能够再次打包当前项目了。请注意命令有所改变,首先是 gulp bundle --ship
,而后是 gulp package-solution --ship
。
再次将生成的sppkg文件上传到应用程序目录网站,你会发现内容地址改为了“SharePoint Online”
而后在测试网站中添加这个应用程序,如今能够发现即使本地并无运行gulp serve
,那个WebPart也能正常工做。
SharePoint Framework(SPFx)是一个很好的创新,它将SharePoint开发提高到了一个全新的高度,开发人员可使用最多见的Web开发工具、框架、语言,实现WebPart和Extensions,这些自定义组件,能够无缝地和SharePoint的原生内容整合在一块儿。
关于SPFx中WebPart开发的更多详细内容,限于篇幅这里就不一一展开了,有兴趣请参考 https://docs.microsoft.com/en-us/sharepoint/dev/spfx/web-parts/overview-client-side-web-parts,关于SPFx中Extensions开发,请参考 https://docs.microsoft.com/en-us/sharepoint/dev/spfx/extensions/overview-extensions