日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

NODE_PATH的疑难杂症(转)

發(fā)布時(shí)間:2025/3/16 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NODE_PATH的疑难杂症(转) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

nodejs 中的 NODE_PATH

在使用 nodejs 開(kāi)發(fā)中我們都免不了要去安裝一些第三方模塊。

那么你或多或少的遇到過(guò)以下一些問(wèn)題

再繼續(xù)閱讀之前,我們先來(lái)弄清楚一個(gè)概念。

npm install --global xxx?屬于全局安裝
npm install xxx?屬于本地安裝

安裝的模塊太多項(xiàng)目太臃腫,模塊沒(méi)能復(fù)用

你寫(xiě)一個(gè)項(xiàng)目 A 需要安裝一個(gè) express 模塊,又開(kāi)發(fā)一個(gè)項(xiàng)目 B 又需要安裝一個(gè) express 模塊

項(xiàng)目中依賴包太多,文件過(guò)多,模塊沒(méi)法復(fù)用,各種問(wèn)題浮現(xiàn)

由于?安裝的依賴包過(guò)多(而且依賴包嵌套依賴包),如果一個(gè)項(xiàng)目依賴多的話,(比如依賴?gulp?系列 或?grunt?系列的項(xiàng)目構(gòu)模塊)那么一個(gè)項(xiàng)目可以說(shuō)輕輕松松上百兆。如果想給想項(xiàng)目更換一個(gè)目錄,都發(fā)現(xiàn)是癡心妄想了。(基本都是1-10KB的小文本文件組成了一個(gè)100多MB的項(xiàng)目,那得有多少個(gè)文件啊!想想如果像java那樣,模塊都是以jar包存在的壓縮歸檔文件可能也好一點(diǎn))。更別提部署了。

其實(shí)這里面的代碼也就是?幾十KB到1兆?是我們自己寫(xiě)的代碼。這些文件想實(shí)現(xiàn) 復(fù)制,移動(dòng),部署是很方面的。

給部署帶來(lái)的困擾

如果你部署過(guò) node 項(xiàng)目到遠(yuǎn)程服務(wù)器,node_modules 目錄的上傳將是一件恐怖的事情

NODE_PATH 出現(xiàn),模塊復(fù)用,最佳實(shí)踐方案

NODE_PATH?是干什么的呢?
操作系統(tǒng)中都會(huì)有一個(gè)PATH環(huán)境變量,想必大家都知道,當(dāng)系統(tǒng)調(diào)用一個(gè)命令的時(shí)候,就會(huì)在PATH變量中注冊(cè)的路徑中尋找,如果注冊(cè)的路徑中有就調(diào)用,否則就提示命令沒(méi)找到。

-> export PATH=$PATH: # 將 /usr/bin 追加到 PATH 變量中 -> export NODE_PATH="/usr/lib/node_modules;/usr/local/lib/node_modules" #指定 NODE_PATH 變量

那?NODE_PATH?就是NODE中用來(lái)尋找模塊所提供的路徑注冊(cè)環(huán)境變量。我們可以使用上面的方法指定NODE_PATH環(huán)境變量。并且用;分割多個(gè)不同的目錄。

加載時(shí)機(jī)

關(guān)于 node 的包加載機(jī)制我就不在這里廢話了。NODE_PATH中的路徑被遍歷是發(fā)生在
從項(xiàng)目的根位置遞歸搜尋?node_modules?目錄,直到文件系統(tǒng)根目錄的?node_modules,如果還沒(méi)有查找到指定模塊的話,就會(huì)去?NODE_PATH中注冊(cè)的路徑中查找。

解決問(wèn)題

基于 nodejs 的包加載路徑搜索算法,我們可以 采用全局安裝的方式,將我們的包安裝到全局。
這樣,我們的項(xiàng)目就可以共享全局中的依賴包。

了解全局

npm root -g?查看在你的系統(tǒng)中全局的路徑。
我們也可以通過(guò)
npm config ls -l | grep prefix?(*nix) 系統(tǒng)中
或是
npm config get prefix
來(lái)查看全局路徑。
是的?prefix?字段就是全局base path

怎么設(shè)置全局路徑呢?

# in *nix npm config set prefix /path/to/global# in windows npm config set prefix C:\\Users\\pc\\global

求同存異,解決模塊版本問(wèn)題

差異性的解決方法

如果 項(xiàng)目A 使用了,express的3.x版本,項(xiàng)目B 使用了 express的4.x版本,那這種情況該怎么辦呢?

可以將 NODE_PATH 指定的位置中存放 express的4.x版本,再將 項(xiàng)目B的?node_modules?目錄中放置 3.x 版本。

這樣就解決了模塊版本差異性問(wèn)題。

所以說(shuō),兩種安裝方式我們并不是只是用其中的一種,他們可以結(jié)合使用,根據(jù) nodejs 的包加載機(jī)制,我們可以靈活使用。

部署不再是問(wèn)題

在部署之前,我們可以將我們項(xiàng)目的所有可以全局安裝的模塊,都以全局的安裝方式安裝到服務(wù)器中。接下來(lái)我們就可以輕松,上傳我們的項(xiàng)目到服務(wù)器中了。這樣上傳也會(huì)變得的很快。

然后配置我們的?NODE_PATH?環(huán)境變量。怎么配置上面也談過(guò),這里就不用多說(shuō)了。(因?yàn)轫?xiàng)目的部署方式多種多樣,所以具體情況可以自行決定。)

本人是使用 PM2 部署管理Nodejs項(xiàng)目,所以我寫(xiě)在 配置文件中。

帶來(lái)的問(wèn)題

是的這種方式也有缺點(diǎn)。因?yàn)樵谑褂?--global?參數(shù)的時(shí)候?--save?或?--save-dev參數(shù)是無(wú)效的。
這樣就帶來(lái)一個(gè)問(wèn)題。此時(shí)?package.json?中的?dependencies,?devDependencies?將無(wú)法享受到npm自動(dòng)更新帶來(lái)的便利,不使用?dependencies,?devDependencies?字段對(duì)我們的項(xiàng)目管理來(lái)說(shuō)是不可接受的。

如何解決

我有一個(gè)不是很優(yōu)雅地解決方法,但是也算是解決了這個(gè)問(wèn)題,希望有更好解決辦法的同學(xué)給我留言。
我寫(xiě)了一個(gè)小工具(npmafter),它的使用方法很簡(jiǎn)單, 它是跨平臺(tái)的。兼容(Mac,Windows,Linux)。(我沒(méi)有發(fā)布到github上,因?yàn)楦杏X(jué)會(huì)有更好的辦法)

$ npm install -g http://yinchangsheng-blog.qiniudn.com/blog/nodejs/npmafter.tgz # install # 然后我們安裝任何模塊就可以這樣 $ npm install express -g | npmafter $ npm install request q -g | npmafter --save $ npm install mocha chai -g | npmafter --save-dev

是的?package.json?文件就會(huì)得到更新。
好的,如果你不糾結(jié)這個(gè)問(wèn)題那么這個(gè)問(wèn)題就算是解決了。

使用?NODE_PATH?可以很好的解決項(xiàng)目開(kāi)發(fā)部署的問(wèn)題。

轉(zhuǎn)載于:https://www.cnblogs.com/jinhengyu/p/10257764.html

總結(jié)

以上是生活随笔為你收集整理的NODE_PATH的疑难杂症(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。