npm 三點疑問?

做 JAVA 開發比較多,很喜歡 Maven 的包管理機制,Maven 中有個 "構件"(artifact) 的概念,其實就是我們常說的組件、部件。Maven 也有中央倉庫,在中央倉庫中每個 構件 都有唯一的坐標,即 artifactName + version,NPM 同樣也是 moduleName + version 來唯一標識每個模塊,那麼問題來了:

1. 為什麼 NPM 倉庫中,模塊的版本不全,比如我要 install jquery@1.10.2,結果提示我沒有找到 1.10.2 版本

2. Maven 的構件名(或者說 JAVA 的規範)一般要求以域名倒序的方式(如:com.alibaba.druid),這相當於一個良好的命名空間,很方便命名的區分,NPM 的模塊名是不是有點亂了。。。我搜了一下 jquery mobile,結果發現有 jquery-mobile、jquery-mobile-min,哪個是官方的、可信的我也分不出來,這是否不便於命名、管理?

3. Maven 有個本地倉庫(可以指定某個文件夾),開發完某個構件後,可以使用 install 安裝到本地倉庫,此時若想在項目中依賴這個構件,直接在 pom.xml 中配置依賴就可以(Maven 會先搜索本地倉庫,如果搜索到就使用,搜索不到才會去下載),有時候所開發的構件規模很小、使用範圍也小,而且很不成熟,沒必要發布到中央倉庫去,以便所有人下載使用,當這個構件真正成熟且有價值的時候發布也不遲。我想問一下,NPM 有本地倉庫的概念嗎,NPM 的全局安裝目錄(prefix)應該不是,NPM 還有個 cache 目錄,很像 Maven 中的本地倉庫,我使用 pack 命令可以把一個模塊打包到 cache 目錄中(對 pack 命令不熟),但是無法使用 install &

來安裝,請大神詳解?

另外,FIS 配套的 lights 包管理工具,應該是我不會用,感覺資源很少。。。而且我創建了個帳號嘗試發布一個 1.10.2 版本的 jquery 時,提示我沒有許可權。。。但我 search 了一下,官方倉庫里沒有這個版本的 jquery 啊,為什麼不能發布呢?

本人 Nodejs 新手,不懂的或說錯的地方,希望專家們輕點噴


1. 將 jQuery 做到 NPM 里不是一開始就這樣的。jQuery 的歷史比 NPM 早,因此之前的版本沒有 Publish 到 NPM 中。

2. 即使約定了域名倒序,但是也可能不遵守,或者瞎寫域名;不像 iOS 開發,又一個最後的審核者。Maven 和 NPM 都沒有,先到先得了。所以搶注個 NPM Package Name也是個生意:)

3. 開發時使用 npm link 可以優先使用本地的版本,便於修改調試。你去看看 npm link 的文檔就知道了。至於 cache,那是純 cache,如果你要在多個目錄里npm install 某些 package,會先到 cache 里找找,減少從網上下載的次數。


1. 這個得看對應 package 的維護者了吧, 他們沒發那個版本自然就沒有呀. 不過使用 npm view &

可以查看到歷史版本.

2. 可能是 JS 生態里大家都沒有這麼命名的習慣吧, 不過 Cordova 好像是有的, 但那個也不是純 JS 的生態. 所以只是個習慣問題. jquery-mobile, jquery-mobile-min 我覺得挺好的呀, 是什麼一目了然.

3. 原來讀文檔的時候, 官方的建議貌似是用 symlink.


不是說好的兩點疑問嗎?怎麼有三條。


node模塊名不是亂了點,而是模塊太多,功能相近,命名不能重複,也沒有規定命名規則,所以就…

jq你只要下載最新版本,然後check out相應版本就好了吧,不過我沒用npm下載過。git clone它吧


加參數-g,存到當前目錄

抱歉記錯了是 --save


推薦閱讀:

前端周刊第58期:送你 3 道面試題
國外優秀的H5頁面,nice到不行
前端周刊第61期:你離 CTC 有多遠?

TAG:網頁設計 | 前端開發 | Nodejs | 前端工程師 | npm |