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

news2024/12/23 14:08:48

入门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).

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美芯再失一大市场,国产车机芯片大突破,高通不再是唯一选择

日前知名评测软件给出的数据指出国内车机芯片市场&#xff0c;国产车机芯片已取得重大进展&#xff0c;性能方面已与车机芯片龙头高通的上一代接近&#xff0c;只有高通最新的车机芯片才取得领先优势&#xff0c;显示出国产芯片取得重大突破。 汽车芯片已是芯片行业的重要增长点…

备份迁移数据库

记录下备份迁移数据库的经历。 使用工具sqldump和mysql 1、sqldump导出数据 #导出整个数据库 sudo mysqldump -uroot -p123456 database > database.sql#导出数据库中某个表 sudo mysqldump -uroot -p123456 database table1 > database.sql#导出数据库中多个表 sudo …

【Unity3D赛车游戏】【六】如何在Unity中为汽车添加发动机和手动挡变速?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

金铜转债上市价格预测

金铜转债 基本信息 转债名称&#xff1a;金铜转债&#xff0c;评级&#xff1a;AA&#xff0c;发行规模&#xff1a;14.5亿元。 正股名称&#xff1a;金田股份&#xff0c;今日收盘价&#xff1a;6.4元&#xff0c;转股价格&#xff1a;6.75元。 当前转股价值 转债面值 / 转股…

初步了解ES

一、ES基础查询 1、es基础查询 1.1 准备数据 # 准备数据 PUT test_index/_doc/1 {"name":"顾老二","age":30,"from": "gu","desc": "皮肤黑、武器长、性格直","tags": ["黑", &…

每日两题 110平衡二叉树 199二叉树的右视图

110 题目 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&a…

提升用户体验:Vue与compressor.js实现高效文件压缩

前言 上传文件是一个常见的需求&#xff0c;并且文件大小往往成为限制因素之一。为了提升用户体验和节省带宽消耗&#xff0c;上传时的文件压缩便显得格外重要。本文将介绍基于 Vue 框架和 compressor.js 的上传时文件压缩实现方法&#xff0c;通过在上传过程中对文件进行压缩&…

Linux常用命令——depmod命令

在线Linux命令查询工具 depmod 分析可载入模块的相依性 补充说明 depmod命令可产生模块依赖的映射文件&#xff0c;在构建嵌入式系统时&#xff0c;需要由这个命令来生成相应的文件&#xff0c;由modprobe使用。 语法 depmod(选项)选项 -a或--all&#xff1a;分析所有可…

Redis数据结构:Set类型全面解析

Set 类型是一个无序并唯一的键值集合&#xff0c;它的存储顺序不会按照插入的先后顺序进行存储。Redis 中集合是通过哈希表实现的&#xff0c;所以添加&#xff0c;删除&#xff0c;查找的复杂度都是 O(1)。相对于列表&#xff0c;集合也有两个特点&#xff1a;无序、不可重复 …

【内网穿透】搭建我的世界Java版服务器,公网远程联机

目录 前言 1. 搭建我的世界服务器 1.1 服务器安装java环境 1.2 配置服务端 2. 测试局域网联机 3. 公网远程联机 3.1 安装cpolar内网穿透 3.1.1 windows系统 3.1.2 linux系统&#xff08;支持一键自动安装脚本&#xff09; 3.2 创建隧道映射内网端口 3.3 测试公网远程…

Spring AOP基于注解方式实现和细节

目录 一、Spring AOP底层技术 二、初步实现AOP编程 三、获取切点详细信息 四、 切点表达式语法 五、重用&#xff08;提取&#xff09;切点表达式 一、Spring AOP底层技术 SpringAop的核心在于动态代理&#xff0c;那么在SpringAop的底层的技术是依靠了什么技术呢&#x…

国产AI芯片突破,芯片或成白菜价,恐惧的美芯阻止台积电为它代工

日前消息指台积电大幅减少一家中国AI芯片企业的产能&#xff0c;原因在于国产AI芯片的性能已接近美芯&#xff0c;美国芯片企业NVIDIA与相关的资本机构贝莱德联手施压台积电所致&#xff0c;凸显出美国芯片忧虑中国AI芯片的竞争力。 这家国产AI芯片企业为壁仞科技&#xff0c;据…

C#,《小白学程序》第七课:列表(List)应用之一————编制高铁车次信息表

1 文本格式 /// <summary> /// 车站信息类 class /// </summary> public class Station { /// <summary> /// 编号 /// </summary> public int Id { get; set; } 0; /// <summary> /// 车站名 /// </summary>…

【JavaSE专栏89】Java字符串和XML数据结构的转换,高效灵活转变数据

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;3年JAVA全栈开发经验&#xff0c;专注JAVA技术、系统定制、远程指导&#xff0c;致力于企业数字化转型&#xff0c;CSDN学院、蓝桥云课认证讲师。 主打方向&#xff1a;Vue、SpringBoot、微信小程序 本文讲解了 XML 的概…

软件测试的方法有哪些?

软件测试 根据利用的被测对象信息的不同&#xff0c;可以将软件测试方法分为&#xff1a;黑盒测试、灰盒测试、白盒测试。 1、白盒测试 1&#xff09;概念&#xff1a;是依据被测软件分析程序内部构造&#xff0c;并根据内部构造分析用例&#xff0c;来对内部控制流程进行测试…

基于Dpabi的功能连接

1.预处理 这里预处理用Gretna软件进行&#xff0c;共分为以下几步&#xff1a; &#xff08;1&#xff09;DICOM转NIfTI格式 (2)去除前10个时间点(Remove first 10 times points)&#xff1a;由于机器刚启动、被试刚躺进去也还需适应环境&#xff0c;导致刚开始扫描的数据很…

macOS 安装 Homebrew 详细过程

文章目录 macOS 安装 Homebrew 详细过程Homebrew 简介Homebrew 安装过程设置环境变量安装 Homebrew安装完成后续设置(重要)设置环境变量homebrew 镜像源设置macOS 安装 Homebrew 详细过程 本文讲解了如何使用中科大源安装 Homebrew 的安装过程,文章里面的所有步骤都是必要的,需…

ExpressLRS开源之RC链路性能测试

ExpressLRS开源之RC链路性能测试 1. 源由2. 分析3. 测试方案4. 测试设计4.1 校准测试4.2 实验室测试4.3 拉距测试4.4 遮挡测试 5. 总结6. 参考资料 1. 源由 基于ExpressLRS开源基本调试验证方法&#xff0c;对RC链路性能进行简单的性能测试。 修改设计总能够满足合理的需求&a…

Streamlit 讲解专栏(十一):数据可视化-图表绘制详解(中)

文章目录 1 前言2 绘制交互式散点图3 定制图表主题4 增强数据可视化的交互性与注释步骤1步骤二 5 结语 1 前言 在上一篇博文《 Streamlit 讲解专栏&#xff08;十&#xff09;&#xff1a;数据可视化-图表绘制详解&#xff08;上&#xff09;》中&#xff0c;我们学习了一些关…