昆明前端开发碎碎念

工作也有一段时间了,平时忙于业务代码的编写中,发现身边的一些人以及自己,对一些基本概念理解有所偏差,可能闹出笑话,会问出下面这些常识性错误的奇怪问题:

vuejs怎么在服务器部署?(我提交到服务器之后执行了 npm run dev之后关闭了是可以打开网页的,但是关闭了ssh之后,服务马上就不能用了,请问正确的部署方式是怎么样的?)

vue开发的项目,前端写的.vue文件中的生命周期方法,线上还存在吗?

2333,怎么都是关于Vue的问题。。。我真没黑Vue开发者,不过也可以看出,Vue的小白受众的确比较多。

webpack和webpack-dev-server

现在基于Vue,React的SPA单页应用开发,都倾向于采用webpack的模块化构建方案。可能大多数人,开发一个项目,会使用脚手架工具(vue-cli, create-react-app)

我们本地开发时,运行命令行npm run dev,然后就开始编写业务逻辑了,对于其中发生了什么,大多数人可能不太关心。其实运行了该命令,就是运行了webpack-dev-server

webpack-dev-server是webpack官方提供的一个小型Express服务器,正是因为webpack-dev-server自己开启了一个服务器,我们才能够前后端分离开发(我们不需要关心后端的代码)。前端启动的这个服务器,是用来构建和渲染页面,并提供了自动刷新和热替换功能。

简单来说:

webpack只是构建(npm run build)

webpack-dev-server除了构建,还提供web服务(npm run dev)

路由

什么是路由?

简单来说:/about/deepred /home/ 这些就是路由。

在web开发中,路由分为前端路由和后台路由。

其实在单页应用还没有流行前,路由基本指的是后台路由。如果你熟悉传统的后台web开发,可能对下面的代码很熟悉:

app.get('/about', function (req, res) {

  res.render('about', { title: 'Hey', message: 'Hello there!'});

});

app.get('/', function (req, res) {

  res.render('index');

});

传统的web网站,所有的路由都是由后台定义的。当我们想访问一个页面http://anata.me/about/,首先向后台发送一个请求,后台根据定义好的路由,决定渲染哪个页面。

然而单页应用的出现,改变了这个模式。如果你是前端开发,应该对这段代码更加熟悉:

routes: [

    {

      path: '/user/:userId',

      name: 'user',

      component: User

    },

    {

      path: '/about/',

      name: 'about',

      component: About

    }

]

前端路由是将页面的渲染权交给了js控制,不通过请求服务器来判断渲染页面。前端一般利用histroy和hash来控制,达到不刷新页面可以使显示内容发生变化,这样速度更快,用户体验更好。前端路由解放了服务端,专心提供接口数据服务。

打包部署

脚手架生成的项目,一般运行npm run build之后,会在项目根目录生成一个dist目录,这就是我们打包好后的静态资源文件。注意的是:

我们线上运行的单页应用,就是打包好后的dist文件,并不是src目录下的源文件

线上部署更不是运行npm run dev启动项目。npm run dev启动的服务器只是为了开发而使用的,真正线上的服务器,是由后台提供的(比如PHP,Java, python, Node...)

部署的方式有很多,比如可以把dist文件和后台代码放在一起,后台把dist文件当做静态资源读取即可。不过因为采用了前端路由的方案,后台还需要配置一下,以Express举例:

// 访问静态资源文件 这里是访问所有dist目录下的静态资源文件

app.use(express.static(path.resolve(dirname, '../dist')))

// 因为是单页应用 所有请求都走/dist/index.html

// 这一句要放在所有其他路由的后面

app.get('*', function(req, res) {

    const html = fs.readFileSync(path.resolve(dirname, '../dist/index.html'), 'utf-8')

    res.send(html)

})

也可以把dist静态文件和后台代码分开,通过Nginx部署:

server {

    listen 80;

    server_name 127.0.0.1;

    location / {

        root /data/deered/dist; #前端打包后的dist文件位置

        try_files $uri $uri/ /index.html; #防止页面刷新404

        index index.html;

    }

}

跨域

因为webpack-dev-server启动了一个服务器,所以在开发时,前端去请求真正的后台接口,是存在跨域问题的。webpack提供了跨域的解决方案,原理就是让服务器反向代理请求真正的接口。

vue-cli配置跨域:

proxyTable: {

  '/api': {

    target: 'http://localhost:8089/api/',

    changeOrigin: true,

    pathRewrite: {

      '^/api': ''

    }

  }

}

前端请求/api/xxxx时,webpack-dev-server启动的服务器会帮我们请求http://localhost:8089/api/xxxx,同时返回数据。

有些人就会有疑惑,那打包后的文件,是不是也能跨域。前面我们说了,线上部署就不是运行npm run dev,所以,前端是不是跨域要看你怎么部署了。

如果你把打包后的dist文件和后端代码放在一起,那么根本就不存在跨域问题!

如果前端静态文件和后端不在一起,那么可以用Nginx做转发。

server {

        listen 80;

        server_name 127.0.0.1;

        location / {

            root /data/deered/dist; #前端打包后的dist文件位置

            index index.html;

            try_files $uri $uri/ /index.html;

        }

        location /api {

            proxy_pass http://127.0.0.1:8089 #后台地址

        }

    }

Vue和React

Vue的指令和模板语言让开发者可以很简洁的完成一个复杂的功能,而React的JSX语法,则让开发者拥有更多的自主权。

从Vue转向React的开发者,一开始可能会非常不适应,毕竟v-for v-if v-model这些最基本的功能,React竟然全都要我们自己去实现。

我们其实可以从本质上来看:

一个Vue的组件

<template>

  <div class="hello" @click="say">

    <h1>{{ msg }}</h1>

    <h2 v-if="show">show me</h2>

  </div>

</template>

<script>

export default {

  name: 'Hello World',

  data () {

    return {

      msg: 'Welcome to Your Vue.js App',

      show: false

    }

  }

  methods: {

    say() {

      console.log('hi')

    }

  }

}

</script>

<style scoped>

h1, h2 {

  font-weight: normal;

}

</style>

一个React的组件

const styles = {

  fontWeight: 'normal'

}

export default class Hello extends Component {

  constructor(props) {

        super(props);

        this.state = {

            msg: 'Welcome to Your React App',

            show: false

        };

    }

  say() {

    console.log('hi')

  }

  render() {

    return (

      <div class="hello" onClick={this.say}>

        <h1 className={styles}>{this.state.msg}</h1>

        {this.state.show ? <h2>show me</h2> : null}

      </div>

    )

  }

}

从两个组件对比就能看见:

React组件完全就是一个Class类,你一直在写各种类方法,甚至你的css也是个对象,所以React要求开发者有较好的ES6基础,因为你无时无刻不在写JS

而Vue就不一样了,Vue组件其实就是个普通的对象,你只是在修改这个对象的属性:name data methods components,说的通俗点,你根本就是在配置对象,例如:你配置了这个对象的components属性,于是就可以在模板中使用自定义组件

因此,React本质上是不可能给你提供类似v-for的API,因为JS已经有了for循环,数组也有map方法,你写React就是在写JS,为啥还需要额外的遍历方法呢?而Vue就不同了,它提供的指令,其实就是在内部帮你写JS,所以从React转向Vue的开发者,一开始会觉得,Vue的代码更简洁了。不过,这是靠牺牲自由度换来的,毕竟在React里,怎么实现遍历,完全由你自己决定。

以上就是昆明前端开发碎碎念的所有内容,希望对大家有所帮助。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

短视频/直播电商部门岗位职责及绩效考核指标管理实施办法|短视频运营岗位职责,直播电商部门管理,直播电商部门绩效考核,短视,频/,直播,电商,部门,岗位职责,绩效,考核,指标,管理,实施办法
短视频/直播电商部门岗位职责及绩效考核指标管理实施办法
在线药店设计书(范文)|在线药店设计书,在线药店设计,在线药店,在线,药店,设计书,范文
在线药店设计书(范文)
x升电子有限公司商务网站项目设计书|商务网站项目设计书,商务网站项目,商务网站,瑞升电子有限公司,x升,电子,有限公司,项目,设计书
x升电子有限公司商务网站项目设计书
必通网上考试书店项目设计书(范文)|必通网上考试书店项目设计书,网上考试书店项目设计书,网上考试书店项目设计,网上考试书店项目,必通,网上,考试,书店,项目,设计书,范文
必通网上考试书店项目设计书(范文)
(有详细评估的范文)E-WORK网络实习平台及线下实习教育|网络实习平台,线下实习教育,E-WORK网络实习平台,详细,评估,范文,work,网络,实习,平台,线下,教育
(有详细评估的范文)E-WORK网络实习平台及线下实习教育
(范文)网上内衣店项目设计书|内衣店项目设计书,网上内衣店项目设计书,内衣店项目设计,范文,网上,内衣,项目,设计书
(范文)网上内衣店项目设计书
**鞋业公司  开拓电子商务和校园市场  营销策划方案|鞋业营销策划,鞋业营销策划方案,**,鞋业,公司,开拓,电子商务,校园,市场,营销策划,方案
**鞋业公司 开拓电子商务和校园市场 营销策划方案
视频伪原创处理:短视频搬运处理方法步骤及图文视频深度创作处理|视频搬运方法,视频搬运技巧,视频伪原创,图文视频技巧,搬运,视频,处理,步骤,图文,原创,短视频搬运,短视,方法,深度,创作
视频伪原创处理:短视频搬运处理方法步骤及图文视频深度创作处理

历史上的今天:04月20日

松耦合型在线学习团队带队经验分享

松耦合型在线学习团队带队经验分享应王可老师的邀请,让我分享一下带队的经验。但也正好借此机会回顾一下这段时间的经历。希望能对大家有所帮助。在参与组长竞选的过程上,更多的还是抱着重在参加的态度,老师在决定组长人选前,单独与我进行了沟通。看到老师的慎重选择,以及班里有各路学霸和精英, 这让我感到组长的担子挺重的。怎样通过组队的方式让大家能够坚持学习下来?会遇到什么样的问题?而且大家素未谋面,时间和节奏也

SEO优化怎么做(分享9大策略和技巧)

SEO优化怎么做(分享9大策略和技巧)在互联网时代,这是网站推广的公司至关重要。网站优化是网站建设的重要环节。第一个网站的构建,它揉详细,合理的优化策略是非常重要的。那么,什么是优化如何有效的网站?今天将共享优化策略九。1.关键字策略识别主题(核心关键词)的网站是至关重要的。当关键字是确定的,整个网站将不得不解决这个核心关键词。2.域名政策包括在域名关键字,连字符“-”突出关键字是一种很常见的域名

微淼商学院筑梦队在线学习团队带队经验分享

微淼商学院筑梦队在线学习团队带队经验分享—————87 班筑梦队队长张小花应牛老师的邀请,让我分享一下带队经验,我借此机会,回顾这八周以来的学习和成长历程,希望对大家有所帮助。在一开始参与组长竞选时,我没考虑太多,只想通过组长的担子,来倒逼自己认真学完这个课程,但当我当上组长后,看到群里的同学们,学霸级水平、职场精英,尤其在起队名时,贡献的多个创意都让我觉得,可能就我水平最低,这让我觉得压力很大,

社区营销组长手册

社区营销组长手册班级架构图:组长手册:指导思想:利他是最好的利己!我们为什么要设立组长呢?因为一个班级有90多人,在实际教学过程中,老师无法顾及到每位同学的学习进度和效果,为了保证更好的学习效果,所以需要组长来协助,及时跟进跟进每位小组成员的学习进度,了解小组内每位同学在学习过程中是否遇到了困难和问题,组长可以解决的,及时解决;解决不了的,和老师反馈,寻求帮助。组长的意义在哪里呢?我们希望组长能做

SEO优化怎么做如何提高效果(怎样快速定位客户)

SEO优化怎么做如何提高效果(怎样快速定位客户)在做SEO的过程中,我们总是会沉浸在“盲目进行时”很长一段时间里,总是停不下来脚本去思考,我们近期的SEO优化工作,是否是徒劳,而仍然日复一日的坚持!因此,我们认为SEO人员在特定周期内,开启网站优化工作的时候,我们应该多加思考。那么,SEO人员,如何做好网站SEO优化工作?根据以往SEO优化的经验,将通过如下内容阐述:1、竞争分析竞争对手是自己最好

热门专题

天麻的功效与作用吃法|天麻的功效与作用,天麻的功效与作用吃法,天麻炖什么治头痛最好,天麻的功效与作用禁忌,天麻多少钱一斤,天麻的功效与作用吃法及禁忌,天麻怎么吃效果最好,天麻粉的功效与作用,天麻怎么吃
天麻的功效与作用吃法
云南巨榕教育投资集团有限公司|云南巨榕教育投资集团有限公司,巨榕教育集团,巨榕教育
云南巨榕教育投资集团有限公司
昆明综合高中|昆明综合高中
昆明综合高中
综合高中|云南综合高中,昆明综合高中,综合高中能考本一吗,综合高中和普通高中的区别,综合高中是什么意思,综合高中能参加全国统一高考吗,综合高中可以考哪些大学,综合高中的学籍是什么
综合高中
安徽开放大学|安徽开放大学报名,安徽开放大学报考,安徽开放大学,什么是安徽开放大学,安徽开放大学学历,安徽开放大学学费,安徽开放大学报名条件,安徽开放大学报名时间,安徽开放大学学历,安徽开放大学专业
安徽开放大学
开放大学|开放大学报名,开放大学报考,开放大学,什么是开放大学,开放大学学历,开放大学学费,开放大学报名条件,开放大学报名时间,开放大学学历,开放大学专业
开放大学
易捷尔单招|易捷尔单招,易捷尔单招培训,易捷尔单招报名,易捷尔单招考试,易捷尔单招培训学校,易捷尔单招分数
易捷尔单招
安徽中源管业有限公司|安徽中源管业有限公司,安徽中源管业有限公司介绍,安徽中源管业有限公司电话,安徽中源管业有限公司地址,安徽中源管业有限公司厂家,安徽中源管业有限公司电力管,安徽中源管业有限公司管材
安徽中源管业有限公司

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部