从0开始搭建一个前端项目的架子

目录

1.概述

2.项目搭建

3.elementUI

4.CSS预处理器

5.重置CSS

6.图标库

7.axios和路由

7.1.axios

7.2.路由

7.3.路由懒加载和异步组件


1.概述

在古早时代,只需要会html、css、js、ajax就能开发一个前端项目,这些技术的上手成本也不高,所以搭建一个前端架子的学习成本是相对较低的。但随着前端技术的发展,为了提高前端的工程化效率,出现诸如UI框架、JS框架、CSS预编译语言、打包工具等等各种各样的轮子,时至今日我们发现要开发一个前端项目,光是搭架子,都需要学习杂七杂八很多东西。

这些内容对于专业前端来说还好,但是实际工作中需要接触到前端项目的其实是不止专业前端,有时候前端资源抽不出身,一些小的页面修改、配置的变动、版本管理、依赖的变动,后端、运维等岗位的小伙伴可能都要亲自动手去改一下前端。尤其是后端的小伙伴,可能时不时就要去看看前端项目。但是打开前端项目的时候可能大家都有种懵逼的感觉:

项目怎么长这样?这还是我认识的html、css、js吗?

本文的目的就是从0开始搭建一个当前主流的基于vue的架子,其中会填充node、webpack、css预处理器、图标库、http请求组件、路由等内容,让大家一步明白,当前主流的一个前端架子都有什么东西?它们又是用来干什么的?当然这也是博主vue实战系列的先导文章,后续会基于这个架子开发一个小的vue实战项目,敬请期待后续的文章。

项目先用vue2来开发,然后重构升级成vue3。

2.项目搭建

一切开始之前我们要搞清楚一件事儿,就是关于依赖的安装,node.js的安装就不赘述了,大家应该都知道现在都是用node.js来进行前端的依赖管理的。npm安装依赖有两种方式:

  • 全局安装,npm install -g <package>,依赖会被安装到node 的cache下面,全局都可以使用。

  • 局部安装,npm install <package>,依赖会被安装到当前项目的node_module下面,只有当前项目可以用。

1.安装脚手架:

由于脚手架的升级,5.X版本以后的脚手架隐藏了很多细节,所以用4.5.15来搭建初始化的项目,展示更多细节。

npm i -D @vue/cli@4.5.15

2.使用脚手架创建项目:

创建一个名叫project-v2的vue项目

npx vue create project-v2

创建出来的项目结构:

3.配置浏览器自动打开:

每次项目启动后需要手动打开浏览器,输入地址端口号,还是很不方便的,在配置文件中可以配置浏览器自动打开首页。在package.json下新建vue.config.js:

module.exports = {  devServer:{open:true,host:'localhost'}}

这样每次启动项目后都会自动打开浏览器。

3.elementUI

我们选用elementUI作为UI框架,element最好的介绍其实就在其官网上,甚至直接可以拷代码来改一改就能用了,这没什么好多说的。要注意的是,elementUI搭配vue2使用,element-plus搭配vue3使用。

npm i element-ui -s

-s是全局安装的意思

安装后在main.js中引入

import ElmentUI from 'element-ui';
​
import 'elemnt-ui/lib/theme-chalk/index.css';
​
Vue.use(ElementUI);

当然为了main.js的清爽,最好的方式还是单独写个js用来管理element的依赖引入,在main.js中引入这个js即可:

element.js:

import Vue from 'vue'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI)

main.js中引入element.js:

import '../plugins/element.js'

4.CSS预处理器

css预处理器,也叫css预处理语言,说的直白点就是赋予css一些编程属性,使得css更加好用易读。关于css预处理器可以移步看博主的另一篇博文:

【CSS预处理语言】less快速入门-CSDN博客

这里我们选择less作为css预处理器,引入依赖:

npm i less@3 less-loader@7 -S

在每个.vue组件内部的style里写各自的样式即可:

<style lang="less">
.hello{background-color: blue;.el-button{color: red;}
}
</style>

5.重置CSS

html标签在浏览器中都有各自的默认样式,比如: p 标签有上下边距,strong标签有字体加粗样式,em标签有字体倾斜样式。不同浏览器的默认样式之间也会有差别,例如ul默认带有缩进的样式,在IE 下,它的缩进是通过margin实现的,而Firefox下,它的缩进是由padding实现的。在切换页面的时候,浏览器的默认样式往往会给我们带来麻 烦,影响开发效率。

解决的方法就是一开始就将浏览器的默认样式全部去掉,更准确说就是通过重新定义标签样式。覆盖浏览器的CSS默认属性。最最简 单的说法就是把浏览器提供的默认样式覆盖掉!这就是CSS reset。

给一份博主的重置css:

html,
body {height: 100%;/* 文字风格 Sans-serif 各笔画粗细相同,Serif 笔画粗细不同,monospace 等宽体,cursive草书,fantasy梦幻 */font-family: 'Microsoft YaHei', sans-serif, 'Helvetica Neue', Helvetica, Arial,'黑体', '宋体', Arial;-webkit-tap-highlight-color: transparent;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;
}
body {font-size: 14px;color: #333;
}/* 重置各标签的默认样式 */
a,
body,
center,
cite,
code,
dd,
del,
div,
dl,
dt,
em,
fieldset,
figcaption,
figure,
footer,
form,
h1,
h2,
h3,
h4,
h5,
h6,
header,
hr,
html,
img,
input,
label,
legend,
li,
mark,
ol,
p,
section,
span,
textarea,
time,
td,
th,
ul {margin: 0;border: 0;padding: 0;font-style: normal;box-sizing: border-box;/*  自动换行 */word-wrap: break-word;/*  强制英文单词断行 */word-break: break-all;
}/*  设置标签为块级分类 */
article,
aside,
details,
fieldset,
figcaption,
figure,
footer,
header,
main,
nav,
section {display: block;
}/* 去除input标签的默认样式 */
button,
input,
textarea {-webkit-appearance: none;font-family: 'Microsoft YaHei', sans-serif, 'Helvetica Neue', Helvetica, Arial,'黑体', '宋体', Arial;border: 0;margin: 0;padding: 0;font-size: 1em;line-height: 1em;outline: none;background-color: transparent;
}/*  禁止多文本框手动拖动大小 */
textarea {resize: none;-webkit-appearance: none;
}/* 去掉按下的阴影盒子 */
input,
textarea,
a {-webkit-tap-highlight-color: transparent;
}/*  清除a标签下划线 */
a,
a:visited {text-decoration: none;
}
a:focus,
a:active,
a:hover {outline: none;
}/*  清除列表前面的点 */
ol,
li,
ul {list-style: none;
}/*  清除IE下图片的边框 */
img {border-style: none;font-size: 0;
}/*  解决chrome浏览器默认黄色背景问题 */
input:-webkit-autofill,
textarea:-webkit-autofill,
select:-webkit-autofill {-webkit-box-shadow: 0 0 0 1000px #fff inset;
}/*  设置默认滚动条样式 */
::-webkit-input-placeholder {color: #afbdcc;
}
:-moz-placeholder {color: #afbdcc;
}
::-moz-placeholder {color: #afbdcc;
}
:-ms-input-placeholder {color: #afbdcc;
}
::-webkit-scrollbar {width: 6px;height: 6px;
}
::-webkit-scrollbar-track {background-color: #f5f5f5;
}
::-webkit-scrollbar-track-piece {background-color: #f5f5f5;border-radius: 6px;
}
::-webkit-scrollbar-thumb {background-color: #cccccc;border-radius: 6px;
}
::-webkit-scrollbar-corner {background-color: #f5f5f5;
}
::-webkit-resizer {background-repeat: no-repeat;background-position: bottom right;
}

在主组件(App.vue)中引入,可以完成对全局样式的设置:

<style lang="less">
@import url('./assets/css/reset.css');
</style>

6.图标库

安装依赖:

npm install -D font-awesome

导入依赖:

main.js

import 'font-awesome/css/font-awesome.min.css'

使用:

组件中使用

font-awesome是通过class来使用的,都以fa开头,可以试一下:

<i class="fa fa-users"></i>

7.axios和路由

7.1.axios

使用axios来进行http请求:

npm install axios -S

安装axios:

import axios from 'axios'
//挂载到原型,可以在全局使用
Vue.prototype.axios=axios

7.2.路由

1.安装路由:

router和vue版本是有对应关系的,否则会报错,注意一下。

npm install vue-router@3.5.3 -S

2.配置路由:

在src下面建一个用来专门装路由配置文件的文件夹router,在文件夹里新建一个路由的配置文件index.js。

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '../components/HelloWorld.vue'
​
Vue.use(Router)
​
export default new Router({routes:[{path:'/',component:HelloWorld}],mode:'history'
})

3.挂载路由:

在main.js里面。

import Vue from 'vue'
import App from './App.vue'
import '../plugins/element.js'
import 'font-awesome/css/font-awesome.min.css'
import axios from 'axios'
import router from './router'
//挂载到原型,可以在全局使用
Vue.prototype.axios=axios
Vue.config.productionTip = false
​
new Vue({//挂在routerrouter,render: h => h(App),
}).$mount('#app')

使用到路由后,主组件(App.vue)里面就不能直接引入组件,需要通过路由来转跳组件:

<template><div id="app">//路由转跳<router-view></router-view></div>
</template>
​
<script>
​
​
export default {name: 'App'
}
</script>
​
<style lang="less">
@import url('./assets/css/reset.css');
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

7.3.路由懒加载和异步组件

import的时候其实组件就已经被加载了,为了节约资源,可以使用路由懒加载的写法,不用先import再使用,而是用到的时候再import。懒加载写法是ES6才支持的特性,要注意浏览器是否支持ES6。

原来的写法:

import Vue from 'vue'
import Router from 'vue-router'
//import的时候其实组件就已经被加载了
import HelloWorld from '../components/HelloWorld.vue'
​
Vue.use(Router)
​
export default new Router({routes:[{path:'/',component:HelloWorld}],mode:'history'
})

懒加载的写法:

import Vue from 'vue'
import Router from 'vue-router'
​
Vue.use(Router)
​
export default new Router({routes:[{path:'/',component:()=>import('@/components/HelloWorld')}],mode:'history'
})

也可以用异步组件的方法来完成懒加载的效果:

import Vue from 'vue'
import Router from 'vue-router'
​
Vue.use(Router)
​
export default new Router({routes:[{path:'/',component:resolve=>require(['@/components/HelloWorld'],resolve)}],mode:'history'
})

至此一个完整的前端项目的架子搭建完成。

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

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

相关文章

数据结构与算法解析(C语言版)--搭建项目环境

本栏目致力于从0开始使用纯C语言将经典算法转换成能够直接上机运行的程序&#xff0c;以项目的形式详细描述数据存储结构、算法实现和程序运行过程。 参考书目如下&#xff1a; 《数据结构C语言版-严蔚敏》 《数据结构算法解析第2版-高一凡》 软件工具&#xff1a; dev-cpp 搭…

一文看懂MySQL 5.7和MySQL 8到底有哪些差异?

目录 ​编辑 引言 1、数据字典和系统表的变化 2、JSON支持的改进 3、新的数据类型 4、安全性增强 5、性能改进 6、InnoDB存储引擎的改进 结论 引言 MySQL作为最常用的开源关系型数据库管理系统之一&#xff0c;一直在不断发展和改进。随着时间的推移&#xff0c;MySQ…

【详细教程】关于如何使用GitGitHub的基本操作汇总GitHub的密钥配置 ->(个人学习记录笔记)

文章目录 1. Git使用篇1.1 下载安装Git1.2 使用Git 2. GitHub使用篇2.1 如何git与GitHub建立联系呢&#xff1f;2.2 配置公钥 1. Git使用篇 1.1 下载安装Git 点击 官网链接 后&#xff0c;进入Git官网&#xff0c;下载安装包 然后根据系统类型进行下载&#xff0c;一般为wind…

【PWN · 栈迁移|off-by-one|伪随机|爆破】[HDCTF 2023]Makewish

一道精巧、包含很多要点的题目 一、题目 二、思路浅析 通过ctypes酷通过伪随机数检测&#xff0c;没用srand指定随机种子时&#xff0c;默认srand(1)。 通过puts_name的off-by-one来泄露canary 进入vuln时&#xff0c;发现只能刚好填充到rbp前面&#xff0c;但是会将最后一个…

尚硅谷大数据项目《在线教育之实时数仓》笔记005

视频地址&#xff1a;尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 第9章 数仓开发之DWD层 P031 P032 P033 P034 P035 P036 P037 P038 P039 P040 第9章 数仓开发之DWD层 P031 DWD层设计要点&#xff1a; &#xff08;1&#xff09;DWD层的设计依…

什么是配电室电能监测系统?

为了保证电力系统的安全、稳定、经济运行成为了当务之急。配电室电能监测系统作为一种新兴技术&#xff0c;有效提高了配电室的运行管理水平&#xff0c;降低了电力系统的风险。接下来&#xff0c;小编来为大家介绍下配电室电能监测系统&#xff0c;一起来看下吧&#xff01; 一…

【Java 进阶篇】Java ServletContext详解:获取MIME类型

MIME&#xff08;Multipurpose Internet Mail Extensions&#xff09;类型是一种标识文件类型的文本标签&#xff0c;通常用于指示浏览器如何处理Web服务器返回的文件。在Java Web应用程序中&#xff0c;ServletContext对象提供了一种方便的方法来获取文件的MIME类型。本篇博客…

el-input输入校验插件(正则表达式)

使用方法&#xff1a;在main.js文件中注册插件然后直接在<el-input>加入‘v-插件名’ (1)在main.js文件&#xff1a; // 只能输入数字指令 import onlyNumber from /directive/only-number; Vue.use(onlyNumber); &#xff08;2&#xff09;在src/directive文件夹中 &a…

docker部署elk

目录 前言 一、创建程序工作路径 二、创建私有网络 三、部署elasticsearch 1.先搜速后下载 2.创建一个基础的容器&#xff08;此步骤是为了拷贝容器里的文件&#xff09; 3.拷贝文件到宿主机 3.1进入容器 3.2拷贝并授权 3.3删除基础容器 4.创建容器 5.访问9200测试 …

Redis入门指南学习笔记(2):常用数据类型解析

一.前言 本文主要介绍Redis中包含几种主要数据类型&#xff1a;字符串类型、哈希类型、列表类型、集合类型和有序集合类型。 二.字符串类型 字符串类型是Redis中最基本的数据类型&#xff0c;它是其他4种数据类型的基础&#xff0c;其他数据类型与字符串类型的差别从某种角度…

【Linux学习笔记】进程概念(上)

1. 冯诺依曼体系结构2. 操作系统的作用3. 进程 1. 冯诺依曼体系结构 如图&#xff0c;这是一个冯诺依曼体系结构简图 其中这里的存储器指的是内存&#xff01; 用通俗的话来解释这个图&#xff0c;就是数据从输入设备进入&#xff0c;然后进入到存储器&#xff0c;CPU从存储器…

阿里云OS系统Alibaba Cloud Linux 3系统的安全更新命令

给客户部署的服务&#xff0c;进入运维阶段&#xff0c;但是经常被客户监测到服务器漏洞&#xff0c;现在整理一下&#xff0c;服务器漏洞问题更新命令步骤。 服务器系统&#xff1a; 阿里云linux服务器&#xff1a;Alibaba Cloud Linux 3 漏洞类型和描述&#xff1a; #3214…

新体验:万圣节夜晚的新游戏!--愤怒的南瓜

引言&#xff1a; Chatgpt4.0 所带来的冲击似乎远超出人们想象&#xff0c;网页小游戏《愤怒的南瓜》在昨日&#xff08;万圣节夜晚&#xff09;火爆了外网。一位名为 Javi Lopez 的外国小哥使用 Midjourney、DALL•E 3 和 GPT-4 打开了一个无限可能的世界&#xff0c;重新演绎…

【Python全栈_公开课学习记录】

一、初识python (一).Python起源 Python创始人为吉多范罗苏姆&#xff08;荷兰&#xff09;&#xff0c;Python崇尚优美、清晰、简明的编辑风格。Python语言结构清晰简单、数据库丰富、运行成熟稳定&#xff0c;科学计算统计分析领先。目前广泛应用于云计算、Web开发、科学运算…

DSP 开发例程(5): tcp_server

目录 DSP 开发例程(5): tcp_server创建工程源码编辑tcp_echo.chelloWorld.c 调试说明 DSP 开发例程(5): tcp_server 此例程实现在 EVM6678L 开发板上创建 TCP Server进程, 完成计算机与开发板之间的 TCP/IP 通信. 例程源码可从我的 gitee 仓库上克隆或下载. 点击 DSP 开发教程…

【机器学习合集】模型设计之注意力机制动态网络 ->(个人学习记录笔记)

文章目录 注意力机制1. 注意力机制及其应用1.1 注意力机制的定义1.2 注意力机制的典型应用 2. 注意力模型设计2.1 空间注意力机制2.2 空间注意力模型2.3 通道注意力机制2.4 空间与通道注意力机制2.5 自注意力机制2.5 级联attention 动态网络1. 动态网络的定义2. 基于丢弃策略的…

PostgreSQL逻辑管理结构

1.数据库逻辑结构介绍 2.数据库基本操作 2.1 创建数据库 CREATE DATABASE name [ [ WITH ] [ OWNER [] user_name ] [ TEMPLATE [] template ] [ ENCODING [] encoding ] [ LC_COLLATE [] lc_collate ] [ LC_CTYPE [] lc_ctype ] [ TABLESPACE [] tablespace ] [ CONNECTION L…

Day17力扣打卡

打卡记录 参加会议的最多员工数&#xff08;拓扑排序 分类讨论&#xff09; 链接 计算内向基环树的最大基环&#xff0c;基环树基环为2的情况分类讨论。 class Solution { public:int maximumInvitations(vector<int> &favorite) {int n favorite.size();vector…

4.多层感知机-3GPT版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 多层感知机一、感知机1、感知机2、训练感知机3、图形解释4、收敛定理5、XOR问题6、总结 二、多层感知机1、XOR2、单隐藏层3、单隐藏层-单分类4、为什么需要非线性激活函数5、Sigmoid函数6、Tanh函数7、ReLU函数8、多类分…

SDK是什么

SDK 是“Software Development Kit”&#xff08;软件开发工具包&#xff09;的缩写&#xff0c;它是一组用于开发特定软件应用、硬件平台、计算机系统或操作系统的开发工具的集合。SDK 通常包括一组开发工具、库、文档和示例代码&#xff0c;以帮助开发者更快地开发和部署应用…