成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

前端項(xiàng)目部署

Aceyclee / 2678人閱讀

摘要:前端項(xiàng)目部署之前很少接觸前端項(xiàng)目的部署,這次為了更全面的學(xué)習(xí)就在本機(jī)上裝了一個(gè)虛擬機(jī)上,在虛擬機(jī)上練習(xí)了如何把一個(gè)寫(xiě)的項(xiàng)目部署到這個(gè)虛擬機(jī)的服務(wù)器上。

前端項(xiàng)目部署

之前很少接觸前端項(xiàng)目的部署,這次為了更全面的學(xué)習(xí)就在本機(jī)上裝了一個(gè)虛擬機(jī)上,在虛擬機(jī)上練習(xí)了如何把一個(gè) react 寫(xiě)的 spa 項(xiàng)目部署到這個(gè)虛擬機(jī)的服務(wù)器上。由于 linux 也是剛接觸不久,所以整個(gè)過(guò)程還是遇到了很多坑,這里記錄下。

目標(biāo)

我有一個(gè)用 react 寫(xiě)的單頁(yè)面應(yīng)用,然后希望部署到服務(wù)器上,通過(guò) ip192.168.1.240/config 這種路徑下訪問(wèn)到我的應(yīng)用。這個(gè) react 項(xiàng)目依賴(lài)一個(gè) node.js 的一個(gè) api 服務(wù),我需要在 nginx 上配置代理使得我的 react 應(yīng)用能夠訪問(wèn)到我的 api 服務(wù)。

準(zhǔn)備

首先要準(zhǔn)備的就是打包好的的 react 應(yīng)用,然后在服務(wù)器上裝一個(gè) nginx 和一個(gè) node.js。

針對(duì)我這個(gè)項(xiàng)目, 我把 react 打包好的項(xiàng)目全部放到了 /root/html/pageConfig 這個(gè)路徑下。

nginx配置

修改 nginx 安裝目錄下的 ./conf/nginx.conf 文件:

#user nodody;
# 1. 由于我的 react 項(xiàng)目打包出來(lái)放在 root 目錄下,需要設(shè)置user 為 root 時(shí)內(nèi)容才能夠被訪問(wèn)
user root;

worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  "$remote_addr - $remote_user [$time_local] "$request" "
    #                  "$status $body_bytes_sent "$http_referer" "
    #                  ""$http_user_agent" "$http_x_forwarded_for"";

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        # 2. 對(duì)我的/api請(qǐng)求轉(zhuǎn)發(fā)到8989端口下node.js服務(wù)
        location /api {
            proxy_pass  http://127.0.0.1:8989;
        }
        # 3. 在/config下的請(qǐng)求都指向到我放在root下的configPage里的內(nèi)容
         location /config {
            alias /root/html/configPage;
            index index.html index.htm;
            #rewrite /config  /root/html/configPage/index.html;
            try_files $uri $uri/ /config/index.html;
         }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;

這里就是只修改了默認(rèn)配置文件的三個(gè)地方,來(lái)滿足我的要求:

修改 userroot,使得 root 下的內(nèi)容能夠被訪問(wèn)

新增 location /api 設(shè)置 proxy_pass 使得 /api下的請(qǐng)求都被轉(zhuǎn)發(fā)到 proxy_pass 設(shè)置的 node.js 服務(wù)處,滿足我的前端頁(yè)面 api 接口代理的問(wèn)題

新增 location /config 的配置,使得 /config 下請(qǐng)求都轉(zhuǎn)發(fā)至我 react 打包文件所在的路徑。這樣我訪問(wèn) 192.168.1.240/config就能看到我的頁(yè)面。這里我當(dāng)初是復(fù)制的location / 的配置,用的也是 root 指向路徑,結(jié)果一直不行,查了資料,發(fā)現(xiàn)應(yīng)該要寫(xiě)成 alias 才行

這里的配置文件可能需要更改多次,才能成功,需要注意的是,每次修改完 nginx 配置,需要重啟下 nginx:

nginx -s reload
靜態(tài)資源路徑問(wèn)題

把打包好的文件傳到服務(wù)器上的時(shí)候,可能出現(xiàn)靜態(tài)資源文件找不到的情況。

資源路徑找不到的原因

可能的原因是當(dāng) react 應(yīng)用打包的時(shí)候,生成 index.html 文件中插入 stylescript 標(biāo)簽的路徑不對(duì),從而找不到靜態(tài)資源。

靜態(tài)資源找不到的解決方法

需要在 webpack 的配置文件中去修改一下 publicPath 這個(gè)屬性,這個(gè)屬性會(huì)影響你的靜態(tài)資源文件插入到 index.html 中的路徑。像我這個(gè)項(xiàng)目設(shè)置 publicPath: "./"就可以了,具體可以多修改幾次多打包幾次試試就行了。

前端路由 前端路由分類(lèi)

前端路由分為兩種實(shí)現(xiàn),一種就是 hashRouter,另一種就是用 H5 新的 History API 實(shí)現(xiàn)的 browserRouter。由于 hashRouter 的路徑帶一個(gè) # 不是特別好看,一般還是用 browserRouter 較多。

前端路由的問(wèn)題

前端路由說(shuō)白了就是路徑變了,不去請(qǐng)求服務(wù)器,而是用 js 去改變頁(yè)面的方式。這樣的話,用 browserRouter 的話這里就存在一個(gè)問(wèn)題,我用前端路由跳轉(zhuǎn)到某一個(gè)路徑下 /xxx,這是我刷新頁(yè)面,這時(shí)候就會(huì)去服務(wù)器上拿資源,這個(gè)前端路由路徑下肯定找不到資源,所以就會(huì)出現(xiàn) 404 報(bào)錯(cuò)。

解決方案

解決頁(yè)面刷新 404 這個(gè)問(wèn)題,只需要把所有的請(qǐng)求全部返回 index.html,可以搜索 history fallback 這個(gè)關(guān)鍵詞查看相關(guān)資料。

針對(duì)我的這個(gè) nginx 配置而言,只需要加入 try_files $uri $uri/ /config/index.html;,就能把前端路由路徑發(fā)送給服務(wù)器時(shí)全部返回 index.html,這樣就解決了 404問(wèn)題。

Route路徑匹配問(wèn)題

配置好上述的 nginx 以及把打包好的文件放到對(duì)應(yīng)的目錄,再把我的 api 服務(wù)啟動(dòng),再訪問(wèn) 192.168.1.240/config 時(shí),已經(jīng)能夠正常的顯示頁(yè)面,并且接口也能正常代理請(qǐng)求到了。但是涉及到路由的頁(yè)面卻沒(méi)有被渲染出來(lái)。

Route路徑匹配的原因

回想一下,在 react-router-domRoute 標(biāo)簽里傳遞一個(gè) path={"/xx"} 的屬性時(shí),前端路由會(huì)根據(jù)這個(gè) path 來(lái)渲染對(duì)應(yīng)的 Route 上傳遞過(guò)去的 Component 組件。那么在我的 nginx 的設(shè)置中,我設(shè)置的是 location /config,也就是說(shuō)我實(shí)際訪問(wèn)路徑都是加上了前綴 /config,所以每個(gè) Route 標(biāo)簽中傳過(guò)去的路徑都因?yàn)槿鄙倭?/config 前綴導(dǎo)致所以的匹配都不成立,所以 Route 的頁(yè)面都沒(méi)有辦法渲染。

Route路徑匹配修改方法

方法很簡(jiǎn)單,在 BrowserRouter 上加一個(gè) basename 的屬性,給這屬性傳遞 config (具體是什么值,依據(jù)你給 nginx設(shè)置 location 時(shí)的前綴,我的例子中是 config),這樣 Route 在匹配路徑的時(shí)候會(huì)加上 basename,這樣就能和對(duì)應(yīng)路徑匹配上,然后渲染對(duì)應(yīng)頁(yè)面。

總結(jié)

對(duì) linux 不熟悉,nginx 也不熟悉,依靠著百度,摸爬滾打嘗試修改了好多次 nginx 配置,終于能夠 react 打包好的文件部署上去了, vue 項(xiàng)目的部署也是沒(méi)什么區(qū)別的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40006.html

相關(guān)文章

  • 前端自學(xué)筆記 - 第二篇(vuePress自動(dòng)部署 & 后臺(tái)項(xiàng)目自學(xué))

    摘要:今天部署好了項(xiàng)目,現(xiàn)在寫(xiě)好了博客頁(yè)面,只要一提交,會(huì)自動(dòng)打包并且部署如果部署失敗,還會(huì)發(fā)送郵件提醒。但今天為了自動(dòng)化部署項(xiàng)目,掛了三四十次了,真是慘不忍睹。。。而這第二個(gè)項(xiàng)目,將會(huì)是第一個(gè)的深入。 長(zhǎng)期更新前端自學(xué)筆記,歡迎關(guān)注 前端自學(xué)筆記 - 第一篇(nginx/flutter/后臺(tái)系統(tǒng)/vuepress博客) 一、jenkins自動(dòng)部署vuePress博客項(xiàng)目 自動(dòng)化部署項(xiàng)目de...

    zzzmh 評(píng)論0 收藏0
  • Jenkins實(shí)現(xiàn)前端項(xiàng)目自動(dòng)化集成打包部署

    摘要:原博客地址實(shí)現(xiàn)前端項(xiàng)目自動(dòng)化集成打包部署掘金地址前言以前寫(xiě)前端項(xiàng)目打包部署,都是手動(dòng)運(yùn)行命令,打包完,然后壓縮,再上傳到服務(wù)器解壓。驗(yàn)證提交代碼,成功自動(dòng)打包部署提交代碼,觀察界面,出現(xiàn)構(gòu)建任務(wù),構(gòu)建完成之后收到郵件通知。 原博客地址:https://yezihaohao.github.io/2017/09/09/Jenkins實(shí)現(xiàn)前端項(xiàng)目自動(dòng)化集成打包部署/掘金地址:https://...

    Guakin_Huang 評(píng)論0 收藏0
  • Sentry異常監(jiān)控方案部署-前端攻略

    摘要:故而,我們需要在項(xiàng)目出現(xiàn)異常時(shí)主動(dòng)對(duì)其進(jìn)行收集上報(bào),分析原因和影響后制定下一步解決方案。所以,我們需要一款成熟的異常監(jiān)控系統(tǒng)來(lái)協(xié)助我們。最近在公司項(xiàng)目中部署了,用于項(xiàng)目中異常監(jiān)控,涵蓋了前端后端。 原文首發(fā)于我的個(gè)人博客: https://lonhon.top/ 凡事只要有可能出錯(cuò),那就一定會(huì)出錯(cuò) 對(duì)于任何一個(gè)項(xiàng)目而言,本地測(cè)試肯定做不到100%覆蓋,而且,我們也不能保證用戶能按照我們...

    Lorry_Lu 評(píng)論0 收藏0
  • 阿里云ECS服務(wù)器部署node項(xiàng)目和vue項(xiàng)目

    摘要:阿里云服務(wù)器部署項(xiàng)目和項(xiàng)目遇到的問(wèn)題第三章申請(qǐng)阿里云服務(wù)器阿里云服務(wù)器地址第一次啥都不懂選的數(shù)據(jù)中心版位中文版不含。步驟輸入申請(qǐng)阿里云服務(wù)器時(shí)候創(chuàng)建的登錄名和登錄密碼,點(diǎn)擊鏈接。 阿里云ECS服務(wù)器部署node項(xiàng)目和vue項(xiàng)目遇到的問(wèn)題(第三章) 申請(qǐng)阿里云ECS服務(wù)器阿里云服務(wù)器地址 showImg(https://segmentfault.com/img/bVbgeNh?w=9...

    dance 評(píng)論0 收藏0
  • 【Vue項(xiàng)目總結(jié)】項(xiàng)目nginx部署

    摘要:項(xiàng)目開(kāi)發(fā)完成,接下來(lái)是上線,關(guān)于項(xiàng)目的部署,我司前端是部署在服務(wù)器上,關(guān)于的相關(guān)文檔,請(qǐng)自行查閱本文只記錄部署時(shí)碰到的一些問(wèn)題。其他總結(jié)文章常規(guī)打包優(yōu)化方案組件通信處理方案后臺(tái)管理項(xiàng)目總結(jié) 項(xiàng)目開(kāi)發(fā)完成,接下來(lái)是上線,關(guān)于vue項(xiàng)目的部署,我司前端是部署在nginx服務(wù)器上,關(guān)于nginx的相關(guān)文檔,請(qǐng)自行查閱;本文只記錄部署時(shí)碰到的一些問(wèn)題。 打包 vue項(xiàng)目打包后,是生成一系列的靜...

    CntChen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<