2016-10-22 63 views
0

我使用browserify來要求bluebird在跨我的WebApi Wrapper for Dynamics CRM中承諾的跨瀏覽器兼容使用。 它迄今爲止效果很好,但是我不喜歡這樣做,例如在IE返回的調用結果中我不能執行Promise.all,而不在我的首頁中再次包含藍鳥。 因此,我希望我的browserify包將Promise公開給全局範圍。當然,它只會做global.Promise = require("bluebird"),但那種感覺很髒。 使用獨立軟件包我做到了,我的獨立軟件也將我的客戶端暴露爲屬性和Promise。然而,名稱變長這種方式,我希望能夠在任何地方都能使用Promise(沒有我的獨立包裝)。用browserify導出內部庫依賴關係到外部作用域

您對此有何看法?這是可能的還是我不應該那樣做?

我現在做的是定義我的客戶爲IIFE,和裏面做到以下幾點: module.exports = { Client: WebApiClient, Promise: Promise };

和browserifying像browserify src/js/WebApiClient.js -d --standalone XrmWebApi -o Publish/WebApiClient.js。 這樣我目前能夠使用XrmWebApi.Client和XrmWebApi.Promise,但我非常想擺脫XrmWebApi來調用promise。

感謝您的幫助。

親切的問候, 弗洛裏安

回答

0

創建全局定義一個新的文件,然後添加在你的包步驟的切入點。

src/js/globals.js

var bluebirdPromise = require("bluebird"); 
global.Promise = global.Promise || bluebirdPromise; 

browserify src/js/globals.js src/js/WebApiClient.js -d -o Publish/WebApiClient.js

你可能會想刪除對bluebird引用您的文件src/js/WebApiClient.js和它的依賴,只是使用Promise

+0

您是否知道將我的客戶定義保留爲IIFE是否是一種更好的做法,還是將它作爲module.exports公開會更好? – DigitalFlow

+0

我不確定你想達到什麼,所以我會猜測。瀏覽器不會理解你的'module.exports'。我看了一下你項目中的最後一個提交,我猜你對你添加的'globals.js'方面的IIFE很感興趣。這似乎沒有必要。您應該可以從「browserify src/js/globals.js」中看到browserify提供的輸出。它會顯示在你的終端上,你會看到代碼已經包裝在你的IIFE中。 – casr

+0

我會評論需要藍鳥的線路,因爲它只會使輸出不可讀。你會看到'browserify'周圍的代碼被縮小了。 https://github.com/substack/browser-pack/blob/01d3989/prelude.js,如果你想學習它更輕鬆一點,一個無懈可擊的版本已經結束... – casr