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

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

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

1. 安装npm

  • 详细参考下面的文章:
    npm常用命令 + 前端常用的包管理工具 以及 npm淘宝镜像配置等.

2. 安装 Vue CLI

  • 安装前可使用 nrm 切换到淘宝镜像,如下:
    nrm use taobao
    
    在这里插入图片描述
  • 安装命令:
    npm install -g @vue/cli
    # OR
    yarn global add @vue/cli
    
    sudo npm install -g @vue/cli  #Mac
    
    在这里插入图片描述
  • 使用命令,查看安装版本
    vue
    vue -V
    
    在这里插入图片描述
  • 官网地址:
    https://cli.vuejs.org/zh/.

3. 创建 vue_demo1 项目(官网)

3.1 创建 vue_demo1 项目

3.1.1 创建项目

  • 命令:
    vue create vue_demo1
    
    sudo vue create vue_demo1   # Mac的要想解决这个sudo的束缚,看下面的 3.1.2 解决 sudo 问题
    
    在这里插入图片描述

3.1.2 解决 sudo 问题

  • 每次必须加上 sudo 挺麻烦的,想要解决的话,根据提示解决,先看提示,如下:
    在这里插入图片描述
  • 输入提示命令解决:
    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 项目

  • 命令如下:
    npm run serve
    
    sudo npm run serve  # Mac权限问题用这个
    
    在这里插入图片描述
  • 访问:
    在这里插入图片描述

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

4.1 创建项目

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

4.2 编写组件

  • 组件结构如下:
    在这里插入图片描述

4.3 编写main.js

  • 如下:
    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 启动看效果

  • 打包项目

    npm run build
    
  • 启动命令:

    npm run serve
    
  • 效果:
    在这里插入图片描述

    在这里插入图片描述

4.6 附代码

4.6.1 组件

  • ZooHead.vue

    <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

    <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

    <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

    <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

    import Vue from 'vue'
    import App from './App.vue'
    
    Vue.config.productionTip = false
    
    
    new Vue({
    	
      el:'#dogZool',
      
      render: h => h(App),
      
    });
    
  • index.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,如下:
    http://服务器IP:tomact端口/vue_demo/dist/index.html
    
    在这里插入图片描述

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

6.1 关于nginx的安装、配置等

  • 关于nginx的安装、配置等,可看下面的文章
    • Nginx 01篇——Nginx详细安装步骤以及Nginx各种启动方式
    • Nginx 02篇——Nginx基本配置与参数说明篇
    • Nginx 03篇——Nginx配置实例

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

6.2.1 上传服务器

  • 存放目录,如下:
    cd /nginx_test/vue_project/vue_demo
    
    在这里插入图片描述

6.2.2 注意问题-403

  • 我这里刚开始将项目放到了 susu 用户下,如下:
    在这里插入图片描述

  • 出先的问题就是 403,如下:
    在这里插入图片描述

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

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

    user susu
    

    在这里插入图片描述

  • 重新访问

    • 修改完配置之后,然后 root 用户重启动 nginx,再次访问,问题已解决。

    • 当然,也可以用 susu 用户启动,root 用户安装的 nginx 也可以,如下:

      sudo ./nginx 
      

      在这里插入图片描述

      如果因为权限问题不能启动,请参考下面这篇文章:
      linux下新建用户并给用户授权以及解决 sudo 不能使用问题.

6.3 配置nginx

  • 如下:
      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,访问看效果

  • 如下:
    http://服务器IP:9007/dist/index.html
    
    在这里插入图片描述

6.5 防火墙问题

  • 如果拒绝访问,查看防火墙问题,可以看下面的文章:
    linux下查看防火墙状态、关闭防火墙、开放关闭端口等.

7. 遇到的问题

7.1 组件之间样式冲突

  • 解决问题:
    style 标签上的 scoped 属性,如下:
    在这里插入图片描述

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

7.2.1 详细问题如下:

  • 本地启动:
    在这里插入图片描述
  • 服务器上:
    在这里插入图片描述

7.2.2 问题原因 + 解决问题

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

8. 项目下载

  • 下载:vue脚手架项目入门demo(vue2).

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/94513.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上门服务系统|上门服务软件开发|上门服务改善生活质量的便捷之选

随着现代生活的快节奏和社交距离的需求&#xff0c;我们越来越渴望能够以更便捷、高效的方式获得我们所需的服务。为了满足这一需求&#xff0c;我们公司开发了一款创新的上门服务系统&#xff0c;旨在将便利与质量相结合&#xff0c;为您提供无与伦比的体验。 无论您是忙碌的白…

layui框架学习(41:表单模块)

之前的文章《layui框架学习》14-16中介绍了通过预设类及部分layui属性设置表单的外观样式&#xff0c;layui中还提供有表单模块以对表单元素进行各类动态化渲染和相关操作&#xff0c;本文学习并记录表单模块form的常用属性、函数及事件的用法&#xff08;如果内容已在之前文章…

MSLearn 开学季:AI 进阶系列|PromptFlow - 做一个教育行业的 Copilot 应用

点击蓝字 关注我们 编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 微软 Reactor 为帮助广开发者&#xff0c;技术爱好者&#xff0c;更好的学习 .NET Core, C#, Python&#xff0c;数据科学&#xff0c;机器学习&#xff0c;AI&#xff0c;区块链, IoT 等技术&#xff0…

Ansible 自动化运维工具的使用

目录 一、Ansible简介 二、Ansible 的安装和使用 1.下载 2.使用 三、Ansible命令和模块 1.命令格式 2.命令行模块 &#xff08;1&#xff09;command 模块 &#xff08;2&#xff09;shell 模块 &#xff08;3&#xff09;cron 模块 &#xff08;4&#xff09;user 模…

wazuh初次理解-8-23

一、wazuh配置&#xff1a; 1、进入官网下载OVA启动软件&#xff1a; Virtual Machine (OVA) - Installation alternatives 2、进入虚拟机进行配置&#xff1a; 3、登录提示&#xff1a; 4、将网络连接模式更改为NAT&#xff0c;否则不能上网&#xff1b; 4、重启网络&#…

爬虫异常处理之如何处理连接丢失和数据存储异常

在爬虫开发过程中&#xff0c;我们可能会遇到各种异常情况&#xff0c;如连接丢失、数据存储异常等。本文将介绍如何处理这些异常&#xff0c;并提供具体的解决代码。我们将以Python语言为例&#xff0c;使用requests库进行网络请求和sqlite3库进行数据存储。 1. 处理连接丢失 …

NineData X SelectDB 联合发布会,即将上线!

8月30日晚上19:00&#xff0c;由 NineData 和 SelectDB 共同举办的主题为“实时数据驱动&#xff0c;引领企业智能化数据管理”的线上联合发布会&#xff0c;即将如期上线&#xff01; 本次发布会将聚焦于实时数据仓库技术和数据开发能力&#xff0c;展示SelectDB新一代实时数据…

如何在VR头显端实现低延迟的RTMP或RTMP播放

技术背景 VR&#xff08;虚拟现实技术&#xff09;给我们带来身临其境的视觉体验&#xff0c;广泛的应用于城市规划、教育培训、工业仿真、房地产、水利电力、室内设计、文旅、军事等众多领域&#xff0c;常用的行业比如&#xff1a; 教育行业&#xff1a;VR头显可以用于教育…

ARM寄存器组

CM3 拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器。 R0-R7&#xff0c;通用目的寄存器 R0-R7也被称为低组寄存器&#xff0c;所有指令可以访问它们&#xff0c;它们的字长为32位&#xff0c;复位后的初始值是不可预料的。 R8-R12&#xff0c;通用目的寄存器 R8-R12也被称…

Apple Configurator iphone ipad 设备管控 描述文件使用方法

一、准备 App Store 下载安装 Apple Configurator 二、Apple Configurator 注册组织&#xff0c; -----------这个组织可以是个人&#xff0c;或者其它组织导出-------再导入进来&#xff1a; 三、描述文件配置&#xff1a;“” 根据管控需求进行配置 “” 四、使用 Ap…

微前沿 | 第1期:强可控视频生成;定制化样本检索器;用脑电重建视觉感知;大模型鲁棒性评测

欢迎阅读我们的新栏目——“微前沿”&#xff01; “微前沿”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里&#xff0c;你可以快速浏览研究院的亮点资讯&#xff0c;保持对前沿领域的敏锐嗅觉&#xff0c;同时也能找到先进实用的开源工具。 本期内容速览 01. 强可…

数据结构之单链表java实现

基本概念 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中指针链接次序实现的。和数组相比较&#xff0c;链表不需要指定大小&#xff0c;也不需要连续的地址。 单链表的基本设计思维是&#xff0c;利用结构体的设置&#xff0c…

爬虫selenium获取元素定位方法总结(动态获取元素)

目录 元素 查看元素信息 元素定位 通过元素id定位 通过元素name定位 通过xpath表达式定位 绝对路径 相对路径 通过完整超链接定位 通过部分链接定位 通过标签定位 通过类名进行定位 通过css选择器进行定位 id选择器 class选择器 标签选择器 属性选择器 定位带…

CPU、MCU、MPU、SOC、SOCPC、概念解释之在嵌入式领域常听到的名词含义

CPU、MCU、MPU、SOC等几个在嵌入式领域学习过程中会涉及到的几个名词。我们来学习一下&#xff0c;资料从网上搜集的&#xff0c;有错的地方可以指出。。。 CPU、MCU、MPU、SOC、SOCPC、 1. CPU2. MPU3.MCUMPU和MCU的区别&#xff1a;4.SOC5. SoPC 1. CPU CPU&#xff0c;即中…

HBase--技术文档--基本概念--《快速扫盲》

官网 Apache HBase – Apache HBase™ Home 阿里云hbase 云数据库HBase_大数据存储_订单风控_数据库-阿里云 云数据库 HBase-阿里云帮助中心 基本概念 HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。它基于Hadoop&#xff0c;采用列式存储方式&#xff0c;可…

数据库第十七课-------ETL任务调度系统的安装和使用

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

如何基于自己训练的Yolov5权重,结合DeepSort实现目标跟踪

网上有很多相关不错的操作demo&#xff0c;但自己在训练过程仍然遇到不少疑惑。因此&#xff0c;我这总结一下操作过程中所解决的问题。 1、deepsort的训练集是否必须基于逐帧视频&#xff1f; 我经过尝试&#xff0c;发现非连续性的图像仍可以作为训练集。一个实例&#xff0…

本地组策略编辑器找不到怎么解决?| 解决windows home 版本隐藏本地组策略编辑器的问题 | 简单的介绍本地组策略编辑器

一般的 Windows 非家庭系统中&#xff0c;本地组策略编辑器不会被隐藏&#xff0c;但在某些特定情况下&#xff0c;可能会受到限制或不可用。如果你无法访问本地组策略编辑器&#xff0c;并且认为应该可以访问&#xff0c;请确保你拥有管理员权限&#xff0c;并检查是否有任何系…

Qt应用开发(基础篇)——对话框窗口 QDialog

一、前言 QDialog类继承于QWidget&#xff0c;是Qt基于对话框窗口(消息窗口QMessageBox、颜色选择窗口QColorDialog、文件选择窗口QFileDialog等)的基类。 QDialog窗口是顶级的窗口&#xff0c;一般情况下&#xff0c;用来当做用户短期任务(确认、输入、选择)或者和用户交流(提…

文件上传漏洞之条件竞争

这里拿upload-labs的第18关做演示 首先先看代码 $is_upload false; $msg null;if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_name $_FILES[upload_file][name];$temp_file $_FILES[upload_file][tmp_name];$file_ext substr($file_name,strrpos($file_…