成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

讀懂package.json -- 依賴管理

fyber / 2817人閱讀

摘要:做為項(xiàng)目的包管理工具,由于其與的緊密配合和出自一人之手,目前已經(jīng)基本沒有競爭對手。依賴樹不同于很多語言的依賴管理,使用的是依賴樹。潛在的運(yùn)行時(shí)沖突。希望以上的介紹能夠幫助你更好的理解的依賴管理。

npm做為Javascript項(xiàng)目的包管理工具,由于其與Node.js的緊密配合(npm和Node.js出自一人之手),目前已經(jīng)基本沒有競爭對手。

包管理工具要解決的主要問題就是依賴包的安裝,在Javascript項(xiàng)目中,包的依賴關(guān)系是由package.json給出的,這篇文件將介紹package.json中描述的依賴信息。

依賴管理

在package.json中,有如下幾項(xiàng)涉及到依賴包的描述:

dependencies

 項(xiàng)目中使用到的包,但不包括測試所使用的包

devDependencies

主要是在測試時(shí)使用的包,也包括一些代碼編譯的包,比如將coffee-script編譯為javascript。也就是說在僅僅使用該項(xiàng)目的時(shí)候(而不進(jìn)行測試等環(huán)節(jié)),不需要安裝的包可以放在devDependencies中

peerDependencies

如果改項(xiàng)目需要指明一些有協(xié)作關(guān)系的包的版本時(shí),使用peerDependencies。這里使用了協(xié)作,而不是依賴,是我個(gè)人的理解。peerDependencies并不是必須安裝的包,但如果一旦要安裝,就要符合要求。比如react-dom的package.json中有如下的描述:

"peerDependencies": {
    "react": "^15.6.1"
   },

peerDependencies至少打消了一些顧慮,比如react生態(tài)中用到的一些包在升級的時(shí)候會不會不匹配?

optionalDependencies

如果有一些依賴包即使安裝失敗,項(xiàng)目仍然能夠運(yùn)行或者希望npm繼續(xù)運(yùn)行,就可以使用optionalDependencies。另外optionalDependencies會覆蓋dependencies中的同名依賴包,所以不要在兩個(gè)地方都寫。

bundledDependencies/bundleDependencies

如果在打包發(fā)布的使用希望一些依賴包也出現(xiàn)在最終的包里,那么可以將包的名字放在bundledDependencies,bundledDependencies的值是一個(gè)字符串?dāng)?shù)組,如:

"name": "awesome-web-framework",
"version": "1.0.0",
"bundledDependencies": [
    "renderized", "super-streams"
   ]

npm pack會將renderized super-streams放入生成的包awesome-web-framework-1.0.0.tgz中,并且在npm install awesome-web-framework-1.0.0.tgz時(shí),renderized super-streams也會被一同安裝。

這些項(xiàng)的內(nèi)容形式都是一樣的(除了bundledDependencies),只是作用不同,如:

  "dependencies": {
    "base62": "~0.1.1",
    "commoner": "~0.7.0",
    "esprima": "https://github.com/facebook/esprima/tarball/ca28795124d45968e62a7b4b336d23a053ac3a84",
    "recast": "~0.4.8",
    "source-map": "~0.1.22"
  }

key就是項(xiàng)目的名詞,而value可以有多種形式

version,遵循semver

一個(gè)tarball的url

一個(gè)git url

本地路徑

關(guān)于semver會在另一篇文章中介紹(先挖個(gè)坑)。

依賴樹

不同于很多語言的依賴管理,npm使用的是依賴樹。也就是說每個(gè)依賴包會有一套自己指定的(在package.json中說明的)依賴包,而不會和其他包共享。
例如,mod-a依賴[email protected],mod-c依賴[email protected],而現(xiàn)在有一個(gè)項(xiàng)目依賴mod-a和mod-c,那么最終安裝的依賴包如下:

├─┬ node_modules
│ ├─┬ mod-a
│ │ ├── [email protected]
│ ├─┬ mod-c
│ │ ├── [email protected]

而Node.js在加載依賴包的時(shí)候會處理這個(gè)問題。之所以文章最開始說npm和Node.js的緊密合作也是這個(gè)原因。

使用依賴樹來管理包帶來了一個(gè)明顯的好處,不用處理依賴沖突的問題。這個(gè)問題在早期的Java項(xiàng)目中比較常見,而在使用了Maven和Gradle之后,情況有所緩解,但只能減輕同一個(gè)包多個(gè)版本被放入發(fā)布的包中這種情況,仍然無法解決依賴沖突這個(gè)根本問題。

依賴樹也有一些缺點(diǎn):

代碼量增加。由于不能共享相同的包(在npm v3中,嘗試著共享相同版本的庫,但還是比較弱),導(dǎo)致最終打包的時(shí)候有同一個(gè)庫的多個(gè)版本的代碼出現(xiàn)在最終包中。

潛在的運(yùn)行時(shí)沖突。以上面的例子為例,可能有些時(shí)候,mod-b的兩個(gè)版本無法同時(shí)運(yùn)行,而這只有在運(yùn)行或者測試的時(shí)候才能被發(fā)現(xiàn)。

希望以上的介紹能夠幫助你更好的理解npm的依賴管理。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/83668.html

相關(guān)文章

  • 讀懂ES7中javascript修飾器

    摘要:例子修飾類自定義參數(shù)值此例和上面功能基本一致,唯一差別在于值是參考修飾函數(shù)傳過來的例子修飾方法修飾函數(shù),對方法進(jìn)行只讀操作嘗試修改函數(shù),在控制臺會報(bào)錯上例中,我們對類中的方法使用修飾器進(jìn)行修飾,使得方法不能被修改。 什么是修飾器 修飾器(Decorator)是ES7的一個(gè)提案,它的出現(xiàn)能解決兩個(gè)問題: 不同類間共享方法 編譯期對類和方法的行為進(jìn)行改變 用法也很簡單,就是在類或方法...

    kelvinlee 評論0 收藏0
  • 從react-start到co源碼(二)

    摘要:第三篇腳手架依賴的核心庫的源碼解析。這三篇文章都是我在日常學(xué)習(xí)中總結(jié)出來的,文章中涉及到的所有代碼可以從我的上找到。 react作為當(dāng)前十分流行的前端框架,相信很多前端er都有蠢蠢欲動的學(xué)習(xí)它的想法。工欲善其事,必先利其器。這篇文章就簡單的給大家介紹一下如何我快速的搭建一個(gè)react前端開發(fā)環(huán)境。主要針對于react小白,大神不喜勿噴。從標(biāo)題可以看出,這里不會僅僅只介紹一下react的...

    MockingBird 評論0 收藏0
  • Yarn 構(gòu)建工具入門基礎(chǔ)

    摘要:就是一個(gè)類似于的包管理工具,它是由推出并開源。二的安裝用法和基本工作流安裝以為例你可以通過包管理工具安裝。在使用一個(gè)包之前,你需要執(zhí)行以下命令將其加入依賴項(xiàng)列表會被加入到文件中的依賴列表,同時(shí)也會被更新。 一、yarn的背景和介紹一直以來,我們在安裝和管理依賴的時(shí)候基本上都會使用npm,npm是一個(gè)非常優(yōu)秀全面且廣受歡迎的包管理工具,它奠定了前端模塊化開發(fā)的基石,為前端的發(fā)展做出了不可...

    tuniutech 評論0 收藏0
  • 你想知道關(guān)于package-lock.json的一切,但是太害怕了問了?

    摘要:內(nèi)容結(jié)構(gòu)是中列出的每個(gè)依賴項(xiàng)的大型列表,應(yīng)安裝的特定版本,模塊的位置,驗(yàn)證模塊完整性的哈希,它需要的包列表,以及依賴項(xiàng)列表。期望與真實(shí)行為之間的這種沖突在中引發(fā)了一個(gè)非常有趣的問題線索。此更改是作為的一部分發(fā)布的,該版本于年月日上線。 showImg(https://segmentfault.com/img/bVbkuXN?w=1440&h=1080); 想閱讀更多優(yōu)質(zhì)文章請猛戳Git...

    OBKoro1 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<