1. 程式人生 > >為什麼vue+webpack需要用到node,如何部署專案到伺服器?

為什麼vue+webpack需要用到node,如何部署專案到伺服器?

第一部分 

  之前一直不太理解為什麼要使用vue+webapck,還有在使用了vue-cli之後會用到後臺,即vue-cli自動幫我們安裝了express伺服器,在本地伺服器上執行,因為我們希望可以模擬在真是伺服器上的效果,然而又不可能始終在真實的伺服器上執行,所以在本地伺服器上執行就很重要了。

  但是通過vue+webpack構建的專案如何部署到伺服器上呢?

  首先VUE 是一個javascript的前端框架,註定了它是執行在瀏覽器裡的,對伺服器本地沒有任何要求,只要一個靜態檔案伺服器能通過http訪問到其資原始檔就足矣!無論你是用apache ,ngnix 就算你要用node 自己實現一個靜態檔案伺服器,也用不了多少行程式碼。

  npm run dev 是用來在本地開發的時候做除錯用的,vue開發的是前端的東西,不是nodejs 服務端程式,按道理講,生產環境裡就不該存在npm,甚至nodejs也不需要(用nodejs來做web靜態服務的除外),正確的做法很簡單,通過npm run build 把生成的dist資料夾(不要上傳資料夾)裡的內容上傳到http伺服器上就可以通過 http來訪問了,開發機上正常,上傳以後 程式出現錯誤不能執行的原因99.99%的可能性是你引用資源的路徑有問題

  一般如果vue框架的程式上傳到網站伺服器的根目錄下是不 會有問題的,也不存在資原始檔引用錯誤的情況,但如果你不是根目錄,就會有問題,通過vue-cli 生成的開發目錄,build以後預設引用資原始檔的路徑是:

比如 app.js的引用方式<script type="text/javascript" src="/static/js/app.js"></script>

  所以,如果你的目錄結構是 如下:

www/
 +hot/
   +static/
   +index.html

  因為index.html裡引用的app.js路徑是:

http://www.xxx.com/static/js/app.js

  但是app.js的實際路徑是:

http://www.xxx.com/hot/static/js/app.js 所以出現了404

  要解決的方法很簡單把引用方式 改成如下兩種方式 都可以:

<script type="text/javascript" src="./static/js/app.js"></script>
或者
<script type="text/javascript" src="/hot/static/js/app.js"></script>
推薦這樣的方式,可以保正在vue-router生成的url下也不出現問題

  都可以,當然這也不需要手動去改。 

  或者在config中的index.js下修改webpack配置:

assetsPublicPath: './'
或者
assetsPublicPath: '/hot/',

  這樣,我們就基本解決了有伺服器子目下執行的問題,

  當然,如果你還用到了vue-router

  要在router的配置中加上

export default new Router({
  mode: 'history',
  base: '/hot/', //加上這一行

  一切執行正常,點選各種連結也能出來,但是由於我啟用了history模式,我直接在瀏覽裡訪問 這樣的url是又404了,為什麼 我可以在首頁通過點選進入 這個頁面,但是直接訪問又不行呢,

  因為在history 模式下,只是動態的通過js 操作window.history 來改變有瀏覽器位址列裡的路徑,並沒有發起http請求,但當你直接 在瀏覽器裡輸入這個地址的時候 就一定要先對伺服器放起http請求,但是這個目標在伺服器上又不存在所以就返回了404了,怎麼解決呢,就是把所有的請求全部轉發到上就可以了  

  我用的是apache 做web伺服器的虛擬空間,而且開啟支.htaccess檔案支援,我成我的檔案里加上如下,就一切正常了,

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On
  
  RewriteCond %{REQUEST_URI} ^/(hot|hot/.*)$
  RewriteRule ^/hot/index\.html$ - [L,NC]
  
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(hot|hot/.*)$ hot/index.html [L]
</IfModule>

這個配置的作用就是把所有伺服器上不存在請求全部轉發到index.html上去,這樣就可以直接通過各種url來訪問了

第二部分: 實際問題的解決

  這一部分即解決實際中遇到的問題。

  我將檔案打包成了production之後放在下面的目錄之下: 

  這樣,即放在了tomcat的webapps下的bbg下的wechat2中,而沒有直接放在webapps的根目錄下,這樣在實際執行的過程中,就會發現報錯,不能正常顯示,因為index.html引用的路徑都是/static/.... ,然而static 叜webapps的根目錄下,所以就會報錯。 

  解決方法很簡答,即在config下的index.js中修改靜態資源的路徑:、

build: {
    env: require('./prod.env'),
    index: path.resolve(__dirname, '../dist/index.html'),
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory: 'static',
    assetsPublicPath: '/bbg/wechat2/',

  從最後兩行,可以看到這樣index.html最終引用的就是/bbg/wechat2/static了,成功執行。 

  說明:之所以將靜態檔案放在這裡執行,是因為我們在bbg同級的目錄下放了一個war包。 war包實際上就是將一個zip檔案的字尾直接修改為war,然後tomcat伺服器在啟動時,就會自動解壓這個war包。解壓後就和你直接整套的去部署是一樣的,也就是通過war包可以方便實際的執行。 

其實war檔案就是Java中web應用程式的打包。借用一個老兄的話,“當你一個web應用程式很多的時候,如果你想把它部署到別的機器上,來回拷這些檔案是件挺鬱悶的事情,如果要是一個檔案就好了。。。那麼war檔案就可以滿足你這個小小的要求”。

那有人會說,這和直接打成rar檔案不一樣嗎?區別大了!

如果你直接打成rar檔案,你得手動的去解壓縮,但是war檔案不需要,你把它放到tomcat的webapp目錄下,就可以直接運行了,我覺得這個功能夠強大,哈哈。

在tomcat安裝目錄下的conf目錄下有個server.xml,搜尋“unpackWARs”關鍵字,你會看到在<Host>標籤中會有對其的設定,如果設定成true,那麼tomcat在啟動的時候,會在webapps目錄下自動解壓你那個war檔案;如果設定成false,則tomcat直接訪問war檔案。

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

假如他的值是true,你的tomcat已經啟動了,你把自動解壓的資料夾刪了,tomcat又會自動解壓,我覺得它是實時的在檢查,一旦沒有,就會解壓。你可以不用擔心啟動它和放war的順序,或者啟動伺服器和存放檔案的順序。

相關推薦

為什麼vue+webpack需要node如何部署專案伺服器

第一部分    之前一直不太理解為什麼要使用vue+webapck,還有在使用了vue-cli之後會用到後臺,即vue-cli自動幫我們安裝了express伺服器,在本地伺服器上執行,因為我們希望可以模擬在真是伺服器上的效果,然而又不可能始終在真實的伺服器上執行,所以在本地伺服器上執行就很重要了。   但

【阿里雲】node.js部署專案到阿里雲ECS(CentOS 7)並實現nginx域名繫結

一、購買阿里雲伺服器 >方法一 1.1、如果你是學生的話,就可以買阿里雲的學生優惠套餐,才9.5元一個月,挺划算的 1.2、搭建伺服器的系統的話,我選用的是 Centos 7.3系統映象 CentOS(Community Ent

vue專案或react專案node搭建靜態檔案伺服器

//npm install express --save-dev 下載express包 //npm install http-proxy-middleware --save-dev 下載代理中介軟體 const fs = require('fs'); const pat

P2P技術做自有點播系統的加速需要和CDN一樣部署很多伺服器嗎?

視訊運營者如果把自有的視訊點播資源,部署在自己的伺服器上,想在全國推廣,希望使用本點播系統的使用者在看視訊時有好的體驗,如果用CDN的話,需要在全國布點,成本很高。那如果使用P2P技術的話,視訊點播系統也還需要部署很多伺服器嗎?具體的實現過程是怎樣的呢? 我們知道如果想利用CDN方案,實現點播視訊在全國各地

使用maven命令進行打包部署專案到遠端倉庫

如果要部署專案到遠端倉庫, 方法一:配置pom.xml: <distributionManagement> <repository> <id>releases</id> <name>Internal

“殺”一個程式設計師不需要改三次需求就可以了!

在很多軟體公司,特別是一些創業型的團隊中,對於這樣的情景可能大家都很熟悉:專案經理或者產品經理(產品狗)口頭或者簡單記錄一下軟體產品的大致要做的功能,直接就讓研發團隊的兄弟(程式猿)去狂擼程式碼。然後他就去喝茶撩妹或者回家陪老婆了... 這種擼起袖子就開乾的方式,看似簡單高效,便於直接溝通,能夠

4.2 什麼時候需要hash_map什麼時候需要map?

 總體來說,hash_map 查詢速度會比map快,而且查詢速度基本和資料資料量大小,屬於常數級別;而map的查詢速度是log(n)級別。並不一定常數就比log(n)小,hash還有hash函式的耗時,明白了吧,如果你考慮效率,特別是在元素達到一定數量級時,考慮考慮ha

vue 安裝cli3.0版本建立專案

注意:Vue CLI需要Node.js版本8.9或更高版本(建議使用8.11.0+)。 檢視node版本:node -v  , 檢視npm 版本  npm -v, 1.首先需要安裝node.js環境 2.如果在vue-cli全域性安裝了以前的(1.x或2.x)軟體包,則需要先使用n

Angular 專案打包之後部署伺服器重新整理訪問404解決方法

將前端程式碼打包部署到Java伺服器中,當跳轉到相應路由介面,重新整理地址,服務找不到地址頁面,所以會報   404 - Page Not Found。 解決方法:只需要將路由轉換成雜湊值: userHash: true,將路由轉化成“#”號的形式 以下兩種方式修改路由,

如何將node.js部署伺服器

注:本文只是簡易的單個node.js檔案(名為server.js)執行,是為了給前端專案寫一個數據介面 環境: 阿里雲伺服器(ubuntu 64bit) xshell 1.首先登入阿里雲新增安全組規則,開放程式執行時訪問的埠號,本文為8

jenkins配置一鍵打包,備份部署伺服器多環境啟動

jenkins配置 1 安裝外掛 系統管理->外掛管理 外掛:Maven Integration plugin,Publish Over SSH 2 ssh scp 配置 系統管理->系統設定 ssh server 配置: 如果用的是統一的key或者密碼,則配

springboot在本地開發通過部署伺服器上失敗無法訪問

自己在本地開發以及測試是沒有問題,但是部署到伺服器上之後訪問失敗,先看一下我的簡單配置吧 pom.xml檔案:工程的打包方式為war 將spring-boot-starter-tomcat的範圍設定為provided, spring-boot-starter-tom

centos安裝vsftpd部署ftp伺服器

Vsftp 安裝配置 1.檢視是否安裝vsftp rpm –qa|grep vsftpd 如果出現 vsftpd-2.0.5-16.el5_5.1 說明已經安裝 vsftp 安裝vsftp yum -y install vsftpd 2.測試 是否安裝成功 (ip 改成

談下vue+nodejs+nginx+mongodb的網站部署伺服器

    回顧一下不久前的一次網站部署經歷吧,過程頗為坎坷,過來人應該深有體會這種爬坑感受。     最近有往nodejs方面學習,官方的文件寫的有點深奧,瀏覽了個兩三遍後,就直接從實戰上手了。去慕課網找了個視訊學習了一下,想了想,我還是喜歡前後端分離的

node.js搭建本地伺服器

node.js官網<------------點選這裡去官網下載node安裝包 下一步下一步傻瓜式安裝就可以,輸入node -V來檢查一下node版本, 建一個資料夾 nodeServer,在此資料夾下npm init 會生成一個package.json檔案,然後執行npm install --save

node中介軟體(微服務)架構中一個node部署多個專案比較好還是一個專案對應一個node比較好?

第一種: 一個專案對應一個node服務; 優點:前端跟node也是可以獨立開發,降低耦合,也可單獨部署; 缺點:一個專案對應一個node,專案多的話,維護不方便; 第二種:一個node下,部署多個專案,可以以這個node作為底盤,在點選進入專案時,讓其載入該專案

vue select的change事件將點擊過的城市名存在數組中下次調需要再調接口

toast input url status fin -a false padding left <template> <div id="body" class="application" v-show="show" v-cloak> &

vue+webpack專案在iOS微信端偶爾出現白屏重新整理又能重新進入的解決方案在Android上不會出現

           問題描述:微信公眾號內部的專案,我使用的是vue+webpack的方式,路徑配置正確的情況下,在Chrome上執行正常,執行npm run build放在測試伺服器上,配置好相應入口,通過微信訪問,在Android機

Linux下root許可權新增使用者並給使用者或使用者組指定目錄的讀寫許可權(比如:tomcat檔案的讀寫許可權可以用於新使用者部署專案)

目的: 在linux環境中為了安全起見,不能讓所有專案都用root部署(防止root許可權過大,對重要檔案的誤操作),所以新加使用者或使用者組,對新使用者或使用者組授予部分檔案操作的許可權。 1.建立使用者newuser,並設定密碼(預設連帶建立newuser組) # useradd n

Vue+Webpack 專案打包優化從 60s 到 17s 的優化

有的 Vue 專案比較大或者說專案中引入了許多第三方庫,那麼在執行 NPM、Run、Build 構建專案的時候會極其的慢。比如我現在的專案就每次打包就要大概 60s 的樣子。可能大家也會遇到如下同樣的問題: NPM、Run、Build 構建專案耗時較長; 打包出來的檔案太大; 打包前