我們已經(jīng)知道前端資產(chǎn)和依賴管理是 npm 的一個(gè)巨大用例,也是 Node.js 采用的主要驅(qū)動(dòng)力。 但究竟有多大?
這是一個(gè)很難回答的問(wèn)題。 npm 上下載最多的包列表并不是很有幫助:像 async、minimist 和 request
這樣的包是依賴于成千上萬(wàn)個(gè)其他包的基本包,所以它們當(dāng)然會(huì)一直安裝和下載
作為這些軟件包安裝的一部分。對(duì)前端感興趣的同學(xué),可以參加Web前端培訓(xùn),你可以學(xué)到更全面的知識(shí)和技能,提高前端開(kāi)發(fā)工作效率。
那么,說(shuō)到前端包,摩擦在哪里?
前端痛點(diǎn)
1. node_modules 沒(méi)有按照前端包需要的方式排列
這是一個(gè)非常明顯的問(wèn)題。 node_modules 文件夾是 npm 默認(rèn)放置包的位置,以利用 Node.js
模塊加載語(yǔ)義。根據(jù)你安裝的軟件包,軟件包最終位于樹(shù)中的不同位置。這對(duì) Node 來(lái)說(shuō)很有效,但是 HTML 和 CSS,無(wú)論好壞,通常都希望東西在一個(gè)位置,比如
/static/mypackage??梢钥隙ǖ氖?,有一些解決方法,但還沒(méi)有一流的解決方案。
2. 前端依賴有不同的沖突解決需求
Node 模塊加載器的樂(lè)趣之一是它允許你同時(shí)存在同一個(gè)模塊的多個(gè)不兼容的版本,而 npm
的樂(lè)趣之一是它將這些版本放在正確的位置,以便你期望的版本會(huì)加載到你期望的位置。這對(duì)消除“依賴地獄”大有幫助,也是 Node
的“許多小模塊”模式如此實(shí)用和受歡迎的原因之一。在Web前端培訓(xùn)中,理論知識(shí)+實(shí)踐項(xiàng)目,雙管齊下,更有利于學(xué)員加深對(duì)所學(xué)知識(shí)的理解和運(yùn)用,真正做到學(xué)以致用,從而將知識(shí)內(nèi)化成自身的能力。
但是前端依賴項(xiàng)根本無(wú)法以這種方式工作。如果你加載兩個(gè)版本的 jQuery,一個(gè)會(huì)“獲勝”。如果你加載兩個(gè)版本的
Bootstrap CSS 框架,它們將同時(shí)應(yīng)用并破壞你的樣式。未來(lái),Web 組件和 Shadow DOM 等 HTML
的新發(fā)展可能有助于解決這些問(wèn)題,但目前,前端依賴關(guān)系可能會(huì)發(fā)生沖突,我們?nèi)绾巫R(shí)別和優(yōu)雅地處理它?
3. 維護(hù)多個(gè)包清單很煩人
前面問(wèn)題的解決方案一直是為前端包創(chuàng)建額外的注冊(cè)中心,但這造成了單個(gè)項(xiàng)目必須有一個(gè)package.json、一個(gè)bower.json、一個(gè)component.json等等的情況,并且每次發(fā)生小更新時(shí)都編輯它們,像所有數(shù)據(jù)重復(fù)一樣,這既繁瑣又容易出錯(cuò)。
4. 尋找與瀏覽器兼容的包是件痛苦的事
npm 是 Javascript 的注冊(cè)表,但目前注冊(cè)表中的大部分內(nèi)容是 Node.js。其中一些模塊適用于使用諸如
browserify
之類的模塊的客戶端時(shí)可以工作,但其中一些則不能。目前,如果不嘗試它們,就無(wú)法輕松找出哪些可以,哪些不可以。如果你想了解更多關(guān)于前端的信息,不妨報(bào)名參加Web前端培訓(xùn),有系統(tǒng)全面的課程和明確清晰的學(xué)習(xí)路線,讓學(xué)習(xí)更輕松更有效。