vuejs是一个非常优秀的前端框架,利用该框架可以快速开发出任何web app,之所以vuejs开发非常高效快捷,其中最重要的一点就是利用webpakc提供的HMR(热模块替换)特性,可以边写vue组件,边实时看效果。

而很多时候,虽然本地我们可能已经搭建了vuejs的开发环境,但是很多时候我们需要做一个小小的实验,不希望对自己开发环境有污染。另外我们知道开发环境最稳定兼容性最好的环境还是linux,我们虽然可以搭建自己的linux开发环境,但是并不是每个时候都适合化大量时间去搭建环境,因此我们需要一个快速启动的linux开发测试环境。这几种情况下,第三方的web ide就是一个非常好的手段。

其中codeanywhere 就是一个非常优秀的代表,其环境本质上是用linux的docker容器构建出来的,每一个人的环境都是一个独立隔离的容器环境,可以随时启动开始写代码调试看效果,不用的时候就可以关闭或者删除。

但是在使用这种web ide时有几个需要解决的问题:

1. 由于容器是在防火墙的后面,而我们webpack构建后的serve url port外界无法访问

这一点比较好解决,因为codeanywhere已经考虑到这个方面,可以使用http://port-xx.yy.com/的方式路由到codeanywhere,它内部做NAT转换可以访问到后端的serve entry.

但其中有一点需要注意,必须将host选项设定为0.0.0.0这样webpack-dev-server允许从外网进来的访问

2.同样由于容器在防火墙后面,webpack-dev-server构建的bundle无法访问

虽然通过第1.点虽然可以通过http://port-xx.yy.com的方式能够访问到类似http://localhost:8080效果的网页,但是该网页中对bundle的引用却无法自动重写为 http://port-xx.yy.com/yourbundle.js ,而永远是类似 http://port-xx.yy.com/yourbundle.js 这样的形式,这是最大的问题。本来我搞来搞去希望通过 public: 'http://port-xx.yy.com' 的方式来解决,但是却发现配置无效。

结合我以前研究过的ssh port forwarding这个知识点,觉得非常适合解决这个问题,最后做了很多实验,确认这个方案可行。

下图是整个拓步:

通过构建浏览器所在的开发主机经由webide容器主机暴露的互联网ip及端口到web-dev-server的隧道,以后在调测时直接通过http://localhost:8080就可以了,因为

在开发主机浏览器中输入上述url后,直接就被route路由到了web-dev-server上,无论是 / 还是 /bundle.js 都通过这条路访问,这就完美解决了web-dev-server无法访问的问题。

其中上图中需要注意的是host22为web-dev-server所在的容器主机的hostname,8080为webpack-dev-server的serve端口

3. webpack-dev-server构建的bundle可能需要很多ajax请求,这时如何能够proxy到自己的backend(可能是laravel,可能是nodejs express开发)

对于在vue开发时前端ajax请求,可以通过web-dev-server对应的proxy配置选项来指定当浏览器访问http://localhost:8080/yourapientry/xx时将由

web-dev-server自动proxy访问你的后端,随后返回数据再通过上面的ssh隧道返回到开发主机浏览器.

devServer: {
hot: true,
host: 0.0.0.0,
port: 8080,
proxy: [
{
context: ['/apidata','/admin'],
target: 'http://yourbackend.com',
changeOrigin: true,
secure: false,
logLevel: 'debug'
}
]
}

4. 如果你希望你的后端也在你本机上,这时还有更加复杂的配置过程

这里只提一下需要使用sock代理,通过一个公网跳板反向打洞到你本机的后端,这样vue组件ajax访问实际上访问到你自己的主机。由于相对更加复杂,感兴趣的同学可以搜索更多sock方面的内容,也可以私聊我深入沟通。

经过这几个步骤,我实现了以下开发环境:

1.vue前端开发完全在webide上进行;

2.同样实现了HMR的高级开发体验;

3.你可以随时安装一些lib,做一些实验,确认ok后再真正将代码拉回到本地开发环境;

4.后端数据依然由自己的主机后端提供,我使用的是laravel

这样就可以前后端分离开发,同时又不怕实验环境由于某些垃圾库而被污染

第三方web ide开发环境下vuejs开发HMR环境搭建-码农这样开发是快乐的!的更多相关文章

  1. Centos7环境下etcd集群的搭建

    Centos7环境下etcd集群的搭建 一.简介 "A highly-available key value store for shared configuration and servi ...

  2. 01.1 Windows环境下JDK安装与环境变量配置详细的图文教程

    01.1 Windows环境下JDK安装与环境变量配置详细的图文教程 本节内容:JDK安装与环境变量配置 以下是详细步骤 一.准备工具: 1.JDK JDK 可以到官网下载 http://www.or ...

  3. Linux环境下SolrCloud集群环境搭建关键步骤

    Linux环境下SolrCloud集群环境搭建关键步骤. 前提条件:已经完成ZooKeeper集群环境搭建. 一.下载介质 官网下载地址:http://www.apache.org/dyn/close ...

  4. Linux环境下HDFS集群环境搭建关键步骤

    Linux环境下HDFS集群环境搭建关键步骤记录. 介质版本:hadoop-2.7.3.tar.gz 节点数量:3节点. 一.下载安装介质 官网下载地址:http://hadoop.apache.or ...

  5. Linux环境下ZooKeeper集群环境搭建关键步骤

    ZooKeeper版本:zookeeper-3.4.9 ZooKeeper节点:3个节点 以下为Linux环境下ZooKeeper集群环境搭建关键步骤: 前提条件:已完成在Linux环境中安装JDK并 ...

  6. 【转】Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本的开发环境(亲测)

    http://blog.csdn.net/ccf19881030/article/details/9204801 很久以前使用博客园博主子龙山人的一篇博文<Cocos2d-x win7+vs20 ...

  7. 在windows下用cygwin和eclipse搭建cocos2dx的android开发环境

    在windows下用cygwin和eclipse搭建cocos2dx(2.1.4)的android开发环境,2013-8-1更新. 一.准备工作 需要下载和安装以下内容,请根据自己的操作系统选择x86 ...

  8. Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本号的开发环境

    写这篇博客时2D游戏引擎Cocos2d-x的最新版本号为2.1.4,记得非常久曾经使用博客园博主子龙山人的一篇博文<Cocos2d-x win7+vs2010配置图文具体解释(亲測)>成功 ...

  9. LINUX环境下SVN安装与配置(利用钩子同步开发环境与测试环境)

    安装采用YUM一键安装: 1.环境Centos 6.6 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata svnserve ...

随机推荐

  1. Winform中在ZedGraph中最多可以添加多少条曲线

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  2. mssql下调用dll

    1.新建类库,里面写入方法,类库里必须样静态,防止实例化 2.将dll存放到文件夹里 3.在sql中运行 EXEC sp_configure 'clr enabled' , '1'; --0代表不允许 ...

  3. Centos7安装vsftp服务

    我们需要向centos操作系统的服务器上上传文件或者下载文件,这时候,ftp有必要安装下, 我们选择主流的vsftp: 第一步:安装vsftp yum install -y vsftpd 第二步:设置 ...

  4. Webshell篇

    常用方法简介: 一.0day拿webshell 参考工具:织梦漏洞利用小工具 二.通过注入漏洞拿Webshell 前提条件:具有足够权限,对写入木马的文件夹要有写入权限,知道网站绝对路径. 对于mss ...

  5. 01 less的使用

    使用less 安装两个包 1===>cnpm install less less-loader --save-dev less中的注释 以 //开头的注释 不会被编译到css文件中去 以 /** ...

  6. 初学Python几个小程序练习

    使用格式化输出的三种方式实现以下输出(name换成自己的名字,既得修改身高体重,不要厚颜无耻) name = 'ABDMLBM' height = 175 weight = 140 # "M ...

  7. Spring熔断

    Hystrix不再维护,使用Resilience4j来代替.

  8. jQuery中的筛选(六)

    1. eq(index|-index) 获取当前链式操作中第N个jQuery对象,返回jQuery对象,当参数大于等于0时为正向选取,比如0代表第一个,1代表第二个.当参数为负数时为反向选取,比如-1 ...

  9. leetcode494. 目标和

    给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S.现在你有两个符号 + 和 -.对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面. 返回可以使最终数组和 ...

  10. oracle存储过程中循环游标,变量的引用

    创建出错时使用: show errors查看具体的错误提示 一. 存储过程中的一个循环及变量引用示例: create or replace procedure my_proiscursor cur i ...