2015-09-07 68 views
0

想象由三個模塊與那些ID的AMD的Java腳本的應用:替換模塊ID與假名

  • 公共/核心/ API
  • 公共/數據/富
  • 公共/遠程/ bar

當我使用r.js構建優化文件時,這些ID仍在編譯文件中。 IMO這是不必要的。例如,優化的文件將仍然在工作的時候搜索和替換如下:

  • 公共/核心/ API - >一個
  • 公共/數據/富 - >乙
  • 公共/遠程/巴 - >ç

的取代的優點是:

  1. 較小的文件大小
  2. 更好的默默無聞
    (是的,你永遠不要相信客戶。不過,替換模塊名稱將需要反向engeneer猜測很多比通過模塊名稱)

找到應用程序的項重要的部分馬上有一個原因,我丟失爲什麼沒有這樣做或一個額外的工具/命令用一些自動生成的ID替換這些ID?

回答

0

的取代的優點是:

  1. 較小的文件大小

勉強。我懷疑真正的項目,你甚至可以減少1%的尺寸。

  • 更好默默無聞
  • 默默無聞是名義上的更好,但我懷疑有人會是誰好對付縮小的代碼將通過這個額外的混淆太狼狽。

    是否有一個原因,我丟失爲什麼不這樣做

    沒有這樣做的原因:

    1. RequireJS仍然要因爲它目前運營這是因爲對於許多用途,將模塊重命名爲任意值是不可接受的。 (在我使用RequireJS的情況下都是這種情況。)所以這會添加額外的代碼路徑到r.js,這將不得不被測試。

    2. 有些情況下RequireJS將不能執行重命名。試想一下:

      define(function (require) { 
      var deps = ['a', 'b']; 
      if (some_condition) 
          deps.push('c'); 
      require(deps, function() { ... }); 
      }); 
      

      RequireJS無法跟蹤依賴於require調用,因爲令牌deps不是字符串字面陣列。然而,它目前可能補償在配置傳遞給r.jsa,b,c可以列爲顯式包含。問題解決了。但是,如果r.js重命名模塊,名稱a,bc將不得不自動更改。爲此,r.js必須使用JavaScript解析器來解析代碼並對其進行修改。目前還不清楚,在一般情況下,它能夠弄清楚它需要改變什麼。

    3. 最終,如果r.js被改變時,它可以做到這一點,它將使r.js要複雜得多這是爲了對付一個相當專業的需要,這可以r.js處理。

    或一個額外的工具/命令以替代那些ID與某些自動生成的ID?

    沒有工具或配置選項可以爲您執行此操作。不管r.js會爲你做什麼理論上可以作爲構建階段完成,然後調用r.js。在將文件傳遞到r.js之前,您必須編寫自己的工具來執行轉換。

    +0

    感謝您的回答。因爲我的所有內容都是靜態的,所以我沒有考慮動態構建依賴關係。我現在看到替換是一個特例。我已經想過編寫一個工具後處理我的優化文件,並通過正則表達式替換模塊名稱。你的想法是做預先優化。你有這個具體的想法嗎?我看到的唯一預優化解決方案是重命名文件夾,文件和依賴關係,然後開始優化過程。 – McFarlane