2017-05-12 90 views
3

我想在JavascriptCore(iOS上)加載一個javascript模塊。在JavaScriptCore中加載AMD模塊

我通過iOS端的正常HTTP請求獲取文件的文本。所以我可以將整個字符串解析到JScontext中。

但現在我想加載該模塊,理想情況下,解決任何其他依賴項,雖然這不是必需的。

我試過使用requireJS節點,但它似乎有很多的依賴性錯誤,也許它有點過時了。

我也試過偷,但我不確定這是否是正確的道路。我也試過這個。 https://github.com/millermedeiros/nodefy

本質上我想要做什麼需要js在瀏覽器中,但在一個純粹的JavaScript環境(沒有瀏覽器,沒有節點)。

我也想用browserify捆綁都記錄下來,並已經看過像這樣的事情 - RequireJS load string

的問題是,當我去browserify代碼,(需要,requirejs)的過程中失敗,並unfound依賴?

任何人都可以指向正確的方向嗎?

回答

4

您提到的技術並不完全兼容。考慮一條線,如require('meow')。通過browserify/webpack /等將加載的文件是node_modules/meow/main.js(取決於package.json所說的是主文件)。在requirejs中,該文件將通過瀏覽器或項目的baseUrl根加載路徑/meow。重寫這個的方法是在requirejs中添加配置選項。這非常痛苦,因爲它實際上會導致您爲node_modules中的每個包創建一個條目。簡而言之,如果沒有很多工作,你就無法真正將requirejs和browserify結合起來。

要使用browserify或webpack設置代碼拆分,您需要爲該包定義一個新的入口點。然後,當你從你的應用程序加載它時,你需要通過執行類似fetch('https://myserver.com/bundle2.js').then()...的加載來加載該js包。有一些工具可以幫助你使用webpack或browserify來做到這一點。

  1. 與Browserify一些策略 - http://esa-matti.suuronen.org/blog/2013/04/15/asynchronous-module-loading-with-browserify/
  2. 的WebPack - https://webpack.github.io/docs/code-splitting.html

該網站的故事不在身邊現在這個權利(2017年)非常好。大多數系統都以某種自定義的方式來做到這一點

+0

感謝您的意見!我是對的,你的答案是,就javascriptcore而言,我將不得不編寫自己的異步加載器?我只對JScore或Android等價物感興趣,因爲requirejs目前在瀏覽器中完全適用於我。我目前正在爲每個模塊動態加載自定義路徑(所以我可以重定向,這些模塊可以存在於不同的服務器上,具體取決於環境),並且運行良好。你會知道關於構建自己的模塊加載器的任何事情,以及與僅僅直接使用eval相比,這會有什麼不同? –

+0

哦,完全。看看這個:https://github.com/parris/twitch_stream_search/blob/master/src/utils/simpleRequire.js#L24我基本上做了我自己的完全異步模塊加載器。隨意閱讀圖書館的其餘部分,以獲得更全面的圖片。這基本上只是幾行內需要類似的環境。現在,您可能遇到的另一個問題是無法使用file://協議在本地加載文件。如果你從服務器加載,但你應該沒問題。看到這個SO回答:https://stackoverflow.com/questions/20829481/ajax-code-without-web-server – Parris