這兩天在和運維GG搞部署項目的事兒。css
碰到一個問題就是,我們的dev,uat,product環境的問題。html
由於是先後端分離,因此在開發和部署的過程當中會有對後端接口的域名的切換問題。折騰了一下午,查詢了各類資料這才把這Node
環境變量process.env
給弄明白。vue
下面這就作個問題解決的記錄。但願能對這個不明白的人有所幫助。node
首先,我們在作react
、vue
的單頁應用開發的時候,相信你們對配置文件裏的process.env
並不眼生。
想不起來? 黑人問號.jpg。react
就是下面這些玩意兒。linux
從字面上看,就是這個 env
屬性,在 development
和production
不一樣環境上,配置會有些不一樣。nginx
行,那下面咱們開始看看這個所謂的 process
究竟是個什麼東西。web
文檔:http://nodejs.cn/api/process....
官方解釋:process
對象是一個global
(全局變量),提供有關信息,控制當前Node.js
進程。做爲一個對象,它對於Node.js
應用程序始終是可用的,故無需使用require()
。vim
process(進程)其實就是存在nodejs中的一個全局變量。
而後呢,我們能夠經過這個所謂的進程能拿到一些有意思的東西。後端
不過咱們今天主要是講講 process.env
。
這是啥?
官方:
process.env
屬性返回一個包含用戶環境信息的對象。
噢噢噢,原來着個屬性能返回項目運行所在環境的一些信息。
有啥用呢?
很明顯的一個使用場景,依靠這個咱們就能夠給服務器上打上一個標籤。這樣的話,咱們就能根據不一樣的環境,作一些配置上的處理。好比開啓 sourceMap,後端接口的域名切換等等。
你是 dev 環境 他是 uat 環境 她是 product 環境。
下面講講如何配置各個環境的環境變量。
直接在cmd環境配置便可,查看環境變量,添加環境變量,刪除環境變量。
#node中經常使用的到的環境變量是NODE_ENV,首先查看是否存在 set NODE_ENV #若是不存在則添加環境變量 set NODE_ENV=production #環境變量追加值 set 變量名=%變量名%;變量內容 set path=%path%;C:\web;C:\Tools #某些時候須要刪除環境變量 set NODE_ENV=
右鍵(此電腦) -> 屬性(R) -> 高級系統設置 -> 環境變量(N)...
查看環境變量,添加環境變量,刪除環境變量
#node中經常使用的到的環境變量是NODE_ENV,首先查看是否存在 echo $NODE_ENV #若是不存在則添加環境變量 export NODE_ENV=production #環境變量追加值 export path=$path:/home/download:/usr/local/ #某些時候須要刪除環境變量 unset NODE_ENV #某些時候須要顯示全部的環境變量 env
打開配置文件所在
# 全部用戶都生效 vim /etc/profile # 當前用戶生效 vim ~/.bash_profile
在文件末尾添加相似以下語句進行環境變量的設置或修改
# 在文件末尾添加以下格式的環境變量 export path=$path:/home/download:/usr/local/ export NODE_ENV = product
最後修改完成後須要運行以下語句令系統從新加載
# 修改/etc/profile文件後 source /etc/profile # 修改~/.bash_profile文件後 source ~/.bash_profile
搞清楚這個問題後,咱們就能夠在不一樣環境的機器上設置不一樣的 NODE_ENV
,固然這個字段也不必定。
你也能夠換成其餘的NODE_ENV_NIZUISHUAI
等等,反正是自定義的。
1.修改代碼裏的後端地址配置
很簡單,就是利用 process.env.NODE_ENV
這個字段來判斷。(process
是node
全局屬性,直接用就好了)
2.在linux上設置環境變量
export NODE_ENV=dev
而後你就能夠去愉快的啓動項目玩了。
由於我如今這個項目 React 服務端渲染。因此後端的請求轉發就沒交給nginx
進行處理。
像日常的純單頁應用,通常是用nginx
進行請求轉發的。
本篇成文比較快,哈哈,若是文內有任何的紕漏,還請指點,我也就學習學習啦。
另外,若是這篇小小的文章對你帶來幫助,不妨給我點個贊吧,這將是我繼續下的一大動力。
謝謝~~
環境變量-JasperXu的博客 :http://sorex.cnblogs.com/p/62...
如何查看並設置NODE_ENV的值? :http://cnodejs.org/topic/587d...
Node.js的process模塊 : http://www.css88.com/archives...
注:【如何配置環境變量】這一塊的內容,是直接引用的 JasperXu的博客 的環境變量。
感謝上面三位的好文。