用過npm的都知道node
npm install 默認安裝到本地 npm install -g 安裝到全局。
但npm install -g是否能夠把package.json中的依賴安裝到全局呢?linux
趕忙去試一下。npm
。。。。。。。。。。。json
不行。服務器
這裏交代下爲何會考慮到把全部依賴都安裝到全局,由於咱們在項目構建時,jekins拉下代碼後,默認都要先npm install安裝依賴到當前目錄,而後npm run build作構建,構建完的dist壓縮打包拷貝到發佈目錄,而後把jekins目錄下的代碼刪除,也就意味着會把對應的node_modules刪除。這樣每次構建都要執行一次install,npm官方倉庫確定是不行了,ui
npm config set registry http://registry.npm.taobao.org/url
設置到淘寶鏡像。code
有人就說了既然能夠全局安裝,爲何不全局安裝,這樣就不用每次下載了。好注意!ci
回到上文,npm install -g 並不能把依賴直接安裝到全局,所以本身寫了一個prebuild.js,get
遍歷package.json中的依賴,並用npm i -g XXX逐個安裝。
安裝成功了,可是去buid時,依然報找到不到...........xxx npm包,
看到網上有人說設置下NODE_PATH ,找到npm包安裝的全局路徑:
export NODE_PATH=/usr/local/node-v6.11.2-linux-x64/lib/node_modules
設置完後,ok了。能夠啊。那之後就用每次刪除再下載了。
這裏NPM的全局路徑能夠npm root -g 查看,並經過npm config set prefix '目標目錄' 修改。(查看npm config get prefix 或者用npm root -g命令也可 )
成功了嗎?
一個項目是ok的,若是多個項目呢? 若是不一樣項目引用到同一個包的不一樣版本,此時依賴版本的管理就沒法依賴npm了,就須要本身寫代碼來管理了。
固然這裏面也有一個以前使用過的方法:
就是在構建服務器上,建一個公共目錄,再在下面按照各項目目錄,預先安裝好各項目的依賴包。
在jekinks構建腳本中,在執行npm install前,看公共目錄是否存在該項目命令的目錄,存在直接拷貝過來就能夠。若是沒有,那就切換到那個目錄下,去安裝,而後在切換回來,再拷貝,再構建。
這樣依賴包的本地管理,也能解決必定的問題。
附npm包管理一些命令
npm update moduleName:更新node模塊
npm rebuild moduleName
npm view moudleName dependencies:查看包的依賴關係
npm view moduleName repository.url:查看包的源文件地址
npm view moduleName engines:查看包所依賴的Node的版本
npm outdated:檢查包是否已通過時,此命令會列出全部已通過時的包,能夠及時進行包的更新
不管你在哪一個文件夾 執行 npm link xxx , 若是沒有xxx模塊, 那麼xxx就會先安裝在全局, 而後再從全局link過來