為什么我不建議使用npm做前端包管理?
會產生冗余問題
前端與后端使用同一套包管理軟件可以減少公共部分的耦合,但是會導致不必要的冗余。
比如一個bootstrap包,是不可能被后端使用的。但是如果統一使用npm管理,每次npm install都會安裝bootstrap包,而后端一輩子都用不倒,完全是浪費帶寬、存儲空間、時間。并且你在運行后端前,每次都安裝個bootstrap,你不覺得惡心嗎?
運行環境完全不同
前端與后端的運行環境是完全不同的,前端運行于瀏覽器內(即主要是DOM與BOM環境,相對受限),后端則運行于OS內(有無限的API與可能性)。所以這兩種開發環境是完全不同的。不同的開發環境使用同一個包管理文件顯然是不合時宜的,也不符合模塊化的理念。
開發人員也可能不同
前端與后端通常是不同的開發團隊,因些前端關注的是HTML,CSS,DOM,BOM, js的UI庫與動作庫。而后端關注的是性能,安全,效率,數據,緩存,用戶管理。他們可能都會用到gulp/grunt,而后端通常不會用到webpack,wiredep,bootstrap, jQuery這類純前端的包。所以強行將他們捆綁在一起是沒有必要的。
同構包可以分開打包
由于isomorphic js的流行,同構包也會越來越多。但是其實你會發現,不管如何同構,前后端的運行環境還是不同的。所以同構包的調用環境還是不一樣的。前端的包通常需要通過browserify,webpack或者gulp等工具發布成前端可用的包。跟npm包直接通過package.json決定從什么地方接入是不同的。即使npm可以為前端包提供字段供前端接入,也會顯得非常混亂。