入门vue——创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目(vue2)

入门vue------创建vue脚手架项目 以及 用tomcat和nginx分别部署vue项目(vue2)

  • [1. 安装npm](#1. 安装npm)
  • [2. 安装 Vue CLI](#2. 安装 Vue CLI)
  • [3. 创建 vue_demo1 项目(官网)](#3. 创建 vue_demo1 项目(官网))
    • [3.1 创建 vue_demo1 项目](#3.1 创建 vue_demo1 项目)
      • [3.1.1 创建项目](#3.1.1 创建项目)
      • [3.1.2 解决 sudo 问题](#3.1.2 解决 sudo 问题)
    • [3.2 查看创建的 vue_demo1 项目](#3.2 查看创建的 vue_demo1 项目)
      • [3.2.1 项目结构](#3.2.1 项目结构)
      • [3.2.2 项目结构简单说明](#3.2.2 项目结构简单说明)
    • [3.3 运行 vue_demo1 项目](#3.3 运行 vue_demo1 项目)
  • [4. 创建 vue_demo2 项目(入门练习)](#4. 创建 vue_demo2 项目(入门练习))
    • [4.1 创建项目](#4.1 创建项目)
    • [4.2 编写组件](#4.2 编写组件)
    • [4.3 编写main.js](#4.3 编写main.js)
    • [4.4 编写index.html](#4.4 编写index.html)
    • [4.5 启动看效果](#4.5 启动看效果)
    • [4.6 附代码](#4.6 附代码)
      • [4.6.1 组件](#4.6.1 组件)
      • [4.6.2 其他](#4.6.2 其他)
  • [5. tomact 上部署脚手架vue项目](#5. tomact 上部署脚手架vue项目)
    • [51. 安装 并 启动 tomcat](#51. 安装 并 启动 tomcat)
    • [5.2 部署vue项目](#5.2 部署vue项目)
    • [5.3 访问项目](#5.3 访问项目)
  • [6. nginx 上部署脚手架vue项目](#6. nginx 上部署脚手架vue项目)
    • [6.1 关于nginx的安装、配置等](#6.1 关于nginx的安装、配置等)
    • [6.2 将打包后的dist文件上传的服务器上](#6.2 将打包后的dist文件上传的服务器上)
      • [6.2.1 上传服务器](#6.2.1 上传服务器)
      • [6.2.2 注意问题-403](#6.2.2 注意问题-403)
    • [6.3 配置nginx](#6.3 配置nginx)
    • [6.4 重启nginx,访问看效果](#6.4 重启nginx,访问看效果)
    • [6.5 防火墙问题](#6.5 防火墙问题)
  • [7. 遇到的问题](#7. 遇到的问题)
    • [7.1 组件之间样式冲突](#7.1 组件之间样式冲突)
    • [7.2 部署服务器上的页面不加载](#7.2 部署服务器上的页面不加载)
      • [7.2.1 详细问题如下:](#7.2.1 详细问题如下:)
      • [7.2.2 问题原因 + 解决问题](#7.2.2 问题原因 + 解决问题)
  • [8. 项目下载](#8. 项目下载)

1. 安装npm

2. 安装 Vue CLI

  • 安装前可使用 nrm 切换到淘宝镜像,如下:

    bash 复制代码
    nrm use taobao
  • 安装命令:

    bash 复制代码
    npm install -g @vue/cli
    # OR
    yarn global add @vue/cli
    
    sudo npm install -g @vue/cli  #Mac
  • 使用命令,查看安装版本

    bash 复制代码
    vue
    vue -V
  • 官网地址:
    https://cli.vuejs.org/zh/.

3. 创建 vue_demo1 项目(官网)

3.1 创建 vue_demo1 项目

3.1.1 创建项目

  • 命令:

    bash 复制代码
    vue create vue_demo1
    
    sudo vue create vue_demo1   # Mac的要想解决这个sudo的束缚,看下面的 3.1.2 解决 sudo 问题

3.1.2 解决 sudo 问题

  • 每次必须加上 sudo 挺麻烦的,想要解决的话,根据提示解决,先看提示,如下:

  • 输入提示命令解决:

    bash 复制代码
    sudo chown -R 501:20 "/Users/XXX/.npm"

3.2 查看创建的 vue_demo1 项目

3.2.1 项目结构

  • 如下:

3.2.2 项目结构简单说明

  • main.js 文件是项目的入口
  • App.vue 组件是所有组件的父组件

3.3 运行 vue_demo1 项目

  • 命令如下:

    bash 复制代码
    npm run serve
    
    sudo npm run serve  # Mac权限问题用这个
  • 访问:

4. 创建 vue_demo2 项目(入门练习)

4.1 创建项目

  • 跟上面的步骤一样,再创建一个新的项目 vue_demo2 ,用于修改练习,创建过程不再介绍。

4.2 编写组件

  • 组件结构如下:

4.3 编写main.js

  • 如下:

    javascript 复制代码
    import Vue from 'vue'
    import App from './App.vue'
    
    Vue.config.productionTip = false
    
    
    new Vue({
    	
      el:'#dogZool',
      
      render: h => h(App),
      
    });

4.4 编写index.html

  • 如下:

4.5 启动看效果

  • 打包项目

    bash 复制代码
    npm run build
  • 启动命令:

    bash 复制代码
    npm run serve
  • 效果:

4.6 附代码

4.6.1 组件

  • ZooHead.vue

    xml 复制代码
    <template>
    	<div>
    		<h2 >{{zoolTitle}}</h2>
    		<nav style="float: right;">
    			<a href="#">首页</a>
    			<a href="#">我的关注</a>
    			<a href="#">我的收藏</a>
    			<a href="#">我的</a>
    		</nav>
    	</div>
    </template>
    
    <script>
    	export default{
    		name:'ZooHead',
    		data() {
    			return{
    				zoolTitle:'01-欢迎来到狗狗乐园!!'
    			}
    		}
    	};
    </script>
    
    <!-- scoped 处理组件样式冲突 -->
    <style scoped>
    	
    	div{
    		height: 80px;
    	}
    	
    	h2{
    		color: green;
    	}
    	
    	nav a{
    		padding-left: 20px;
    	}
    	
    </style>
  • DogInfo.vue

    html 复制代码
    <template>
    	<div >
    		<h2 >02-狗狗信息</h2>
    		
    		<table>
    			<caption>狗狗信息</caption>
    			<thead>
    				<tr>
    					<th>狗狗编号</th>
    					<th>狗狗姓名</th>
    					<th>狗狗性别</th>
    					<th>狗狗年龄</th>
    					<th>狗狗种类</th>
    					<th>备注</th>
    				</tr>
    			</thead>
    			<tbody>
    				<tr v-for="dog in dogs" v-bind:key="dog.dogNum">
    					<td>{{dog.dogNum}}</td>
    					<td>{{dog.dogName}}</td>
    					<td>{{dog.sex}}</td>
    					<td>{{dog.dogAge}}</td>
    					<td>{{dog.dogKind}}</td>
    					<td>{{dog.dogDesc}}</td>
    				</tr>
    			</tbody>
    		</table>
    
    	</div>
    </template>
    
    <script>
    	export default{
    		name:'DogInfo',
    		data() {
    			return{
    				dogs:[
    					{dogNum:'A1001',dogName:'麦兜',sex:'女',dogAge:3,dogKind:'边牧',dogDesc:'温柔、调皮又粘人'},
    					{dogNum:'A1002',dogName:'贝塔',sex:'女',dogAge:3,dogKind:'边牧',dogDesc:'性格温柔'},
    					{dogNum:'A1003',dogName:'大牙',sex:'男',dogAge:2,dogKind:'边牧',dogDesc:'活泼'},
    					{dogNum:'A1004',dogName:'泡泡',sex:'女',dogAge:6,dogKind:'柯基',dogDesc:'性格温柔'},					
    					{dogNum:'A1005',dogName:'乐乐',sex:'男',dogAge:1,dogKind:'柴犬',dogDesc:'调皮'},
    					{dogNum:'A1006',dogName:'闪闪',sex:'男',dogAge:9,dogKind:'秋天',dogDesc:'高傲'},
    					{dogNum:'A1007',dogName:'托尼',sex:'女',dogAge:3,dogKind:'边牧',dogDesc:'聪明'}	
    				]
    			}
    		}
    	};
    </script>
    
    <style scoped>
    	
    	table caption{
    		font-size: 25px;
    		background-color: aqua;
    	}
    	table{
    		background-color: aqua;
    		border: 1px solid;
    		border-collapse: collapse;
    		width: 800px;
    		height: 300px;
    		margin-bottom: 30px;
    		/* border-radius: 10px; */
    	}
    
    	th,td{
    		border: 1px solid;
    		text-align: center;
    	}
    	
    	h2{
    		color: rebeccapurple;
    	}
    	
    </style>
  • ZooBottom.vue

    html 复制代码
    <template>
    	<div >
    		<h2 >{{zoolMore}}</h2>
    		<footer>
    			<nav>
    				<a href="#">关于我们</a>
    				<a href="#">联系我们</a>
    				<a href="#">友情链接</a>
    				<a href="#">了解更多</a>
    			</nav>
    		</footer>
    	</div>
    </template>
    
    <script>
    	export default{
    		name:'ZooBottom',
    		data() {
    			return{
    				zoolMore:'03-更多'
    			}
    		}
    	};
    </script>
    
    <style scoped>
    	
    	h2{
    		color: skyblue;
    	}
    	a{
    		padding-left: 20px;
    	}
    	
    </style>
  • App.vue

    html 复制代码
    <template>
    	<div>
    		
    		<ZooHead></ZooHead>
    		<hr>
    		<DogInfo></DogInfo>
    		<hr>
    		<ZooBottom></ZooBottom>
    		
    	</div>
    </template>
    
    <script>
    
    	//引入组件
    	import ZooHead from "./components/ZooHead.vue"
    	import DogInfo from './components/DogInfo' //.vue 可省略
    	import ZooBottom from './components/ZooBottom'
    	
    	export default{
    		name:'app',
    		components:{
    			ZooHead,
    			DogInfo,
    			ZooBottom
    		}
    	};
    	
    </script>
    
    <style>
    </style>

4.6.2 其他

  • main.js

    javascript 复制代码
    import Vue from 'vue'
    import App from './App.vue'
    
    Vue.config.productionTip = false
    
    
    new Vue({
    	
      el:'#dogZool',
      
      render: h => h(App),
      
    });
  • index.html

    html 复制代码
    <!DOCTYPE html>
    <html lang="">
      <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width,initial-scale=1.0">
        <link rel="icon" href="<%= BASE_URL %>favicon.ico">
        <title><%= htmlWebpackPlugin.options.title %></title>
      </head>
      <body>
    	  
        <div id="dogZool">
    		<App></App>
    	</div>
        
      </body>
    </html>

5. tomact 上部署脚手架vue项目

51. 安装 并 启动 tomcat

  • 关于 tomcat的安装等问题,自己解决一下,或者参考下面的文章:
    linux下安装tomact.

5.2 部署vue项目

  • 将 build 后的 dist 文件上传到服务器上,放到 tomcat 的 webapps 目录下,我这里又加了一层 vue_demo ,如下:

5.3 访问项目

  • 直接输入,访问即可,注意端口号,我这里把tomact 的端口改成了 8089,如下:

    bash 复制代码
    http://服务器IP:tomact端口/vue_demo/dist/index.html

6. nginx 上部署脚手架vue项目

6.1 关于nginx的安装、配置等

6.2 将打包后的dist文件上传的服务器上

6.2.1 上传服务器

  • 存放目录,如下:

    bash 复制代码
    cd /nginx_test/vue_project/vue_demo

6.2.2 注意问题-403

  • 我这里刚开始将项目放到了 susu 用户下,如下:

  • 出先的问题就是 403,如下:

  • 问题原因:

    我这里是 root 用户启动的 nginx,所以这里有访问权限的问题。

  • 解决问题:

    解决办法:把 nginx 的启动用户改成目录的所属用户,重启 Nginx 即可解决,配置如下:

    bash 复制代码
    user susu
  • 重新访问

6.3 配置nginx

  • 如下:

    bash 复制代码
      server {
          listen 9007;
          server_name 服务器IP;
    
          location /dist/ {
    #        root  /home/susu/vue_project/vue_demo/;
            root  /nginx_test/vue_project/vue_demo/;
         }
     }

6.4 重启nginx,访问看效果

  • 如下:

    bash 复制代码
    http://服务器IP:9007/dist/index.html

6.5 防火墙问题

7. 遇到的问题

7.1 组件之间样式冲突

  • 解决问题:
    style 标签上的 scoped 属性,如下:

7.2 部署服务器上的页面不加载

7.2.1 详细问题如下:

  • 本地启动:
  • 服务器上:

7.2.2 问题原因 + 解决问题

  • 问题原因:
    资源路径问题,服务器上路径不对,解决路径即可
  • 解决问题:
    vue.config.js中配置 publicPath:'./' 即可,如下:
  • 打包,重新部署问题解决!

8. 项目下载

相关推荐
GIS程序媛—椰子41 分钟前
【Vue 全家桶】7、Vue UI组件库(更新中)
前端·vue.js
我血条子呢1 小时前
[Vue]防止路由重复跳转
前端·javascript·vue.js
半开半落2 小时前
nuxt3安装pinia报错500[vite-node] [ERR_LOAD_URL]问题解决
前端·javascript·vue.js·nuxt
麦麦大数据2 小时前
基于vue+neo4j 的中药方剂知识图谱可视化系统
vue.js·知识图谱·neo4j
customer082 小时前
【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源·intellij-idea
理想不理想v2 小时前
vue经典前端面试题
前端·javascript·vue.js
小阮的学习笔记2 小时前
Vue3中使用LogicFlow实现简单流程图
javascript·vue.js·流程图
YBN娜2 小时前
Vue实现登录功能
前端·javascript·vue.js
杨荧2 小时前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka