簡體   English   中英

具有傳遞依賴性的AMD模塊

[英]AMD modules with transitive dependencies

假設我想創建一個本身依賴於其他AMD模塊的AMD模塊。 沒關系,但實際上,假設它依賴於moment.js的某種新型日期選擇器小部件

所以我設置了一個bower.json,看起來像這樣:

{
  "name": "sampleLib",
  "version": "0.0.1",
  "description": "test",
  "main": "myControl.js",
  "moduleType": [
    "amd"
  ],
  "dependencies": {
    "moment": "~2.8.1"
  }
}

好的。 沒問題。

我的問題是關於它如何被消耗的...我看到兩個選擇,我都不喜歡:

選項一

將我的代碼和moment.js連接到一個統一的腳本中,並將其發布。 客戶端只需使用我的模塊即可輕松使用。 在這種情況下:

  1. Moment.js實際上是devDependency,因為我的客戶不必下載它嗎?
  2. 如果客戶端依賴於另一個模塊,而該模塊也可傳遞地依賴於moment.js,那么客戶端周圍是否有辦法基本上將庫兩次加載?

選項二

不要合並我的代碼,並在bower.json中將moment.js聲明為依賴項。 因此,當客戶bower install我的庫時,它們還將關閉moment.js。 這很酷。 但是我擔心的是命名空間...假設我將瞬間視作“ lib / moment”,但客戶端的結構使其僅依賴於瞬間視作“ moment”? 在運行時,我的代碼是否會因為未定義lib / moment而失敗? 我擔心這太脆弱了,除了良好的文檔記錄之外,還有其他方法可以強化這一點嗎?

TL; DR

發布具有依賴性的AMD模塊的最可靠方法是什么?

選項1-雖然串聯更容易分發代碼,但這樣做卻遇到了一個問題-冒着與其他庫沖突的風險。 您還增加了js庫的大小。

選項2-我認為您並不是真正在這里指代命名空間,而是模塊的路徑。 那是對的嗎? RequireJS有一個配置塊,您可以更改基本路徑和映射來解決您所指的問題。 http://requirejs.org/docs/1.0/docs/api.html#config

因此,在您的情況下,如果要發布AMD模塊和依賴項,我仍然會選擇選項2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM