全局安裝往往是安裝一個工具,他不是安裝在一個文件夾下,而是安裝在某個全局環境下,如目前我的安裝路徑是:
C:\Users\cvter\AppData\Roaming\npm
在這里,我們可以看到所有全局安裝的工具,如webpack、babel-cli等等。
全局安裝在命令行中的任何地方都是可以直接調用的。因為安裝之后,我們可以看到如下所示:
這里是全局安裝了的babel和webpack,可以看到在根目錄下都有cmd后綴的文件,通過這些文件,我們就可以直接在命令行中使用了。 如使用 babel --version、 babel-doctor --version等等都是有效的,且不管你是在哪個目錄文件下運行的。
但是局部安裝並不是這樣,往往是在一個項目中安裝之后裝入 ./node_nodules 下面, 然后在項目中,我們可以使用 require 等方式引入。這樣的局限在於,只能是在本項目中使用,而webpack和babel這樣的工具可以在各種情況、各種項目中使用。引用方式如下:
var gulp = require('gulp'); var less = require('gulp-less');
引入之后我們保存到了gulp和less中,這樣,我們就可以繼續使用他們了。
本地安裝一般是 npm install webpack或者npm install webpack --save 或者 npm install webpack --save-dev等等,他們都是全局安裝,區別僅在於是否將依賴存入dependencies以及devdependencies文件中去。
為什么已經全局安裝了,還需要本地安裝呢?
1、僅僅是全局安裝夠用嗎?
通常情況下的引入模塊是分為兩種來尋找的,一種就是全局模塊,通過NODE_PATH下去尋找;還有一種就是通過./node_modules去尋找。 如果在項目中,我們希望使用require來表現這種明顯的依賴關系,那么我們就必須使用安裝來進行require,當然也是可以將全局安裝的文件復制過來,但是這是非常麻煩的。 或者是使用..、.、/等這種相對或者絕對的方式來引入,這些無疑都是比較麻煩的,所以本地安裝不夠用。
另外,我們也許在不同的項目中所需要的模塊的版本是不同的,或者可能對某些模塊進行重新命名,這就導致一個項目的重命名影響全局,這是不划算的。
2、本地安裝的重要性。
因為我們需要的包可能有十個,他們之間相互依賴的,如果我們使用全局包,那么每次包的升級、更新等就會影響你的多個項目,那么依賴關系就會被破壞,所以使用本地安裝有利於不同項目之間的獨立性。