為什麼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模式,我直接在瀏覽裡訪問 http://www.xxx.com/hot/item/1 這樣的url是又404了,為什麼 我可以在首頁通過點選進入 http://www.xxx.com/hot/item/1 這個頁面,但是直接訪問又不行呢,
因為在history 模式下,只是動態的通過js 操作window.history 來改變有瀏覽器位址列裡的路徑,並沒有發起http請求,但當你直接 在瀏覽器裡輸入這個地址的時候 就一定要先對伺服器放起http請求,但是這個目標在伺服器上又不存在所以就返回了404了,怎麼解決呢,就是把所有的請求全部轉發到http://www.xxx.com/hot/index.hmtl上就可以了
我用的是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 構建專案耗時較長; 打包出來的檔案太大; 打包前