SharePoint Framework 在web部件中使用已存在的JavaScript庫 - JavaScript庫的格式
部落格地址:http://blog.csdn.net/FoxDave
JavaScript庫格式
不同的JavaScript庫的編譯和打包方式各不相同。一些是以模組的方式打包的,而另一些是以純指令碼執行在全域性的方式。當從URL載入JavaScript庫時,你要如何註冊外部指令碼取決於指令碼的格式。指令碼的格式有許多中:AMD、UMD或CommonJS,但只需要知道該指令碼是不是一個模組即可。
在註冊打包為模組的指令碼時,唯一需要做的事情是指定特定指令碼需要從哪個URL載入。另一方面,非模組化指令碼需要最小範圍指令碼的URL(即.min.js)和全域性名稱變數。舉個例子,Angular v1.x是一個非模組化指令碼,我們在SPFx專案中將它註冊為外部資源,用如下程式碼指定它的URL和全域性名稱:
"angular": {
"path": "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js",
"globalName": "angular"
}
指定globalName屬性的值很重要,它與指令碼使用的名稱一致。這樣使指令碼能夠正確地將自己暴露給其他依賴它的東西。ngOfficeUIFabric - 一個依賴Angular的UMD模組。由於已經在模組內進行了依賴處理,在註冊它時你只需要指定URL:
"ng-office-ui-fabric": "https://cdnjs.cloudflare.com/ajax/libs/ngOfficeUiFabric/0.12.3/ngOfficeUiFabric.js"
jQuery時一個AMD指令碼,註冊它比較簡單,即"jquery": "https://code.jquery.com/jquery-2.2.4.js"
現在想象一下,你想要使用jQuery中的一個外掛,它時一個非模組化指令碼,這時如果使用以下程式碼進行註冊:"jquery": "https://code.jquery.com/jquery-2.2.4.js",
"simpleWeather": {
"path": "https://cdnjs.cloudflare.com/ajax/libs/jquery.simpleWeather/3.1.0/jquery.simpleWeather.min.js",
"globalName": "jQuery"
}
載入web部件很可能會發生錯誤,因為有可能兩個指令碼是並行載入的,外掛無法進行註冊。![](https://i.iter01.com/images/8e452c8a2b6bf956c46fc195969455ceecb00caf8f90a7a63643f98f2753e407.png)
之前提到過,SPFx允許你指定非模組化外掛的依賴關係。這些依賴在globalDependencies屬性中設定:
"jquery": "https://code.jquery.com/jquery-2.2.4.js",
"simpleWeather": {
"path": "https://cdnjs.cloudflare.com/ajax/libs/jquery.simpleWeather/3.1.0/jquery.simpleWeather.min.js",
"globalName": "jQuery",
"globalDependencies": [ "jquery" ]
}
每一個依賴必須指向config/config.json檔案中的externals部分。現在如果你想要編譯專案,你會遇到另一個錯誤,提示你不能依賴非模組化指令碼。
要解決這個問題,你需要註冊jQuery為非模組化指令碼:
"jquery": {
"path": "https://code.jquery.com/jquery-2.1.1.min.js",
"globalName": "jQuery"
},
"simpleWeather": {
"path": "https://cdnjs.cloudflare.com/ajax/libs/jquery.simpleWeather/3.1.0/jquery.simpleWeather.min.js",
"globalName": "jQuery",
"globalDependencies": [ "jquery" ]
}
這樣simpleWeather指令碼就會在jQuery載入之後在自行註冊了。很難手工判斷想要載入的指令碼是模組化還是非模組化指令碼,特別是最小化的指令碼。如果你的指令碼在一個公網URL承載,你可以使用免費的Rencore SharePoint Framework Script Check工具來確定指令碼的型別。而且,該工具讓你能夠知道承載指令碼的位置是否正確配置。
非模組化指令碼的考慮
許多JavaScript庫和指令碼是非模組化指令碼。雖然SPFx支援載入非模組化指令碼,你還是應該避免去使用它們。
非模組化指令碼在頁面的全域性被註冊:一個web部件載入的指令碼對頁面上的其他web部件都可用。如果你有兩個web部件使用了不同版本的jQuery並且都載入為非模組化指令碼,最後載入的web部件會覆蓋之前載入的jQuery版本。你能想象,這可能會導致不可預見的結果並且不容易除錯問題。模組結構通過隔離指令碼並防止它們互相影響解決了這個問題。
什麼時候考慮捆綁打包
捆綁打包已存在的JavaScript庫到你的web部件會生成尺寸較大的web部件檔案,導致頁面的低效能。儘管我們應該避免這樣使用,但一些情況下還是有優勢的。
如果你編譯一個標準的解決方案,這個解決方案會在很多內網執行,那麼整體捆綁打包會幫助你確保你的web部件會正確工作,因為你不知道你的解決方案安裝在哪裡,不知道那裡能不能從外部資源載入指令碼,那麼整體打包就會確保你引用的資源都可以成功載入到。
如果你的解決方案由許多web部件組成,有一些共享的函式,那麼可以考慮將這些共享的函式單獨編譯成庫並作為外部資源在所有web部件中引用。
總結
通過前面一篇和本篇,在編譯客戶端web部件時,SPFx允許我們捆綁打包將這些庫跟web部件打包到一起,或者作為外部資源載入。雖然從外部URL載入已存在的庫是推薦的方式,還是有一些情況採用捆綁打包更適合。
相關文章
- gRPC-Web:替代REST的gRPC的Javascript庫包RPCWebRESTJavaScript
- 推薦一個markdown格式轉html格式的開源JavaScript庫HTMLJavaScript
- 打造自己的JavaScript工具庫JavaScript
- 必須知道的JavaScript庫 - 視覺化庫JavaScript視覺化
- SharePoint JavaScript 更新使用者和組欄位JavaScript
- validator庫在gin中的使用
- 詳解JavaScript中的嵌入式資料庫JavaScript資料庫
- 使用Javascript 開發個JSON解析庫JavaScriptJSON
- 深受 Pandas 啟發的 JavaScript 開源庫 — Danfo.js 現已推出!JavaScriptJS
- 3.5 JavaScript——常用庫JavaScript
- 使用JavaScript手寫一個簡單的快捷鍵庫JavaScript
- 6 款 Javascript 的影像處理庫JavaScript
- urlcat:JavaScript的URL構建器庫JavaScript
- [分享] 最流行的 10 個 JavaScript 庫JavaScript
- SharePoint中你不知道的圖片庫(實戰)
- iOS中的動態庫,靜態庫和framework介紹iOSFramework
- Java / JavaScript在TensorFlow中的入門使用指南JavaScript
- 流行 Javascript 庫在安裝時展示廣告JavaScript
- JavaScript 中 toString 的奇妙使用JavaScript
- 11 個最好的 JavaScript 動態效果庫JavaScript
- Licia:最全最實用的 JavaScript 工具庫JavaScript
- C# 使用JavaScript設定或驗證 PDF中的文字域格式C#JavaScript
- iOS的Framework靜態庫iOSFramework
- Javascript類庫:vue.js中的vue-resource示例詳解JavaScriptVue.js
- 什麼是JavaScript類庫JavaScript
- Robot Framework(5)- 使用測試庫Framework
- [Web翻譯]JavaScript中的編譯與填充WebJavaScript編譯
- 最好的 3 個開源 JavaScript 圖表庫JavaScript
- 5 個頂級的 JavaScript Ajax 元件和庫JavaScript元件
- AdBlock 增加了快取JavaScript 庫的功能BloC快取JavaScript
- Polars提供Javascript的資料處理庫 - levelupJavaScript
- javascript中檢測變數是否存在時,最好使用typeofJavaScript變數
- JavaScript中的thisJavaScript
- JavaScript中的$JavaScript
- 在HTML中使用JavaScriptHTMLJavaScript
- 使用JavaScript和Python實現Oracle資料庫的儲存過程?JavaScriptPythonOracle資料庫儲存過程
- 【必須知道的JavaScript庫】 - 解決95%問題的工具外掛/庫 - 1JavaScript
- 在 JavaScript 中掌握日期JavaScript
- JavaScript的註釋格式是什麼JavaScript