【前端小记】从线上开发到本地化

开篇

这篇文章是因为想总结一下一直以来工作中记录在记事本中的前端知识点。从而进行复盘。虽然不是所有的知识点都记录下来的,但是其实也记录了很多。知识是无限的,如果之前记录的知识后来没有去回顾和使用,那和没有记录是没有区别的。

而且我希望发布一些文章,应该也能给别人带来一些帮助,尽管自己能力有限,可能在大佬看来不算什么,但总能帮助到一些人的。

废话不多说,那么马上开始吧。

欢迎关注公众号:大前端早读

起因

以前的工作模式基本是完全线上开发的,页面采取碎片化开发,页面是由前端使用freemarker模板配合后台的接口获取数据,本地写好代码后,放在线上编辑器中,创建页面,并直接使用线上地址打开,直接将代码渲染成带数据的html模板,css与js则是以分类成公共的静态文件。一开始,大家都使用这种方法模式,但有一些比较麻烦的地方,就是多人开发时,无法“多线程”开发,特别是修改样式脚本的时候,需要看修改时间与修改人,一旦两个人同时修改同一个静态文件(样式脚本文件)时,便会出现冲突。某某覆盖了某某的代码,造成不必要的时间浪费。对于现在来说确实是这么回事,但是对于当时来说,也只能如此。

本地服务器临时方案

方法是人想出来的。在当时后期一段时间,就觉得每次修改代码都需要在线上保存发布,是很费时间的,那时我们用的还是基础的html、css、js。外加上jquery,就这样做渲染。当时就下载了一个本地服务器,我记得当时叫php服务器,可以本地创建静态文件并生成直链,于是就采用这种方式,在freemarker模板中插入了这个形式。

<link rel="stylesheet" type="text/css" href="css本地直链" />

<script src="js本地直链"></script>

这样就可以直接在本地修改样式和脚本,然后直接刷新页面来看效果了,不需要反复线上保存。最后调的差不多的时候,直接一次性代码考到线上就行了。

到之后发现http-server这个npm包可以创建本地服务器,就用这个了。

使用Tampermontey插件

但是这样当然还是有缺点的,除了你本机,其他人没连同一个内网的话。本地直链资源是没办法加载到的。之后就慢慢换了新的方式:采用Tampermontey这个浏览器插件,这个插件的作用就是可以做黑科技脚本。指定一个正则网址,只要你打开的网址匹配到正则,便会在当前页面中劫持注入一段你写的脚本。这样我就想到了使用这个来做本地化开发。

这是插入脚本的方式,插入样式的方式也一样。这样你就不需要改动原代码进行调试代码了。

但尽管如此,有个问题依旧存在,那就是原代码依旧会加载出来,报错的也依旧会报错,以前的做法时,代码尽可能写成可覆盖形式。如果将整个区块的代码写成一个函数,然后后面加载的函数就可以覆盖前面的函数了,从而实现本地调试。因为这个问题因为这个方法依旧用处不是太大。

使用fiddler抓包工具代理

直到,有一次,在fiddler工具中发现了一个代理的功能。说到fiddler,我想大多数前端都或多或少使用过这个工具,可以说是非常好用的。一般来讲,对开发移动端前端页面、定位问题时用处最大,排查是否是前端问题,首先能看到后台接口返回的数据是否有问题,如果没有问题,那就要去看看是否逻辑能通了。所以大多数人还是把它当做一个抓包工具,测试数据对错来用的。实际上它还有别的功能,如这次说的数据代理。

所谓数据代理,就是访问服务器链接时,将服务器返回的数据进行拦截下来,然后将数据替换掉,这个功能是很强大的。因此我将其利用到了前端调试中。比如样式脚本代理,将服务器中的静态资源拦截下来替换为本地的资源。

如页面中加载的脚本文件为:https://www.baidu.com/1.js,而我们要修改并测试脚本,但如果直接线上修改是不太好的,比较耗时间。那么我们就可以将脚本代理到本地中,直接修改本地脚本然后刷新页面即可。

设置一下:选中AutoResponder-->Enable rules和Unmatched requests passthrough

然后点击Add Rule按钮创建代理规则

上一个框表示你要改变代理的链接,下一个框表示你的本地代码路径(可以是本地路径的,也可以是网络直链的的)

本地的可以选择这一项

save后然后访问:https://www.baidu.com/1.js

访问出来的就是你本地的代码

用这种方式。你在可以在本地修改代码,改完Ctrl+S后刷新页面就可以看到你改的效果了,是不是很方便。

这种方式很多人都知道,但是还有一部分人还是不清楚的。希望对您有所帮助。

react架构重构项目

再到之后,项目采取react的方式开始进行重构,react采取一种jsx的开发方式,页面的渲染由jsx编译为js,获取本页的数据,并将数据渲染出来,并采用多页模式。页面碎片化变成了组件化,其实也是差不多的意思。

在重构方案确定后,这个时候整个项目已经本地化了,然后慢慢将原有的页面一部分一部分变成react写法。

本地调试线上:

一般情况下本地开发过程中,可以直接使用本地方式和本地假数据。但是如果在前后端联调或上线后可能出现bug的话,很难找到错误的地方,因为上线后代码基本是压缩的。那大多数情况下可能就需要将线上的数据复制到本地中作为假数据进行操作了,这种方式一般可行,但也可以有更快的方式:

原理:

使用fiddler把所有你要调试的页面代理到你要调试的模板页面中,页面地址后面跟个你要调试的本地页面名。本页数据是异步现网来的,然后加载本地的组件。就可以做到调试线上数据,使用本地代码了

做法:

fiddler创建规则:表示只有你访问的链接的参数中带有plugin参数,就可以匹配到这个代理的模板

规则:regex:(?inx)^(http|https)(.)+(plugin)=(.)+ #Match HTTPS-delivered GIFs

本地模板:

一个空的html模板

数据使用js获取,并加载本地js,如:

let ip="10.73.155.134";//本地ip
//获取url参数值
let GetUrlQueryString=function(url,name){
    var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
    var r = url.substring(url.indexOf("?")).substr(1).match(reg);
    if(r!=null)return unescape(r[2]); return null;
}
let url=location.href;
let pluginName=GetUrlQueryString(url,"plugin");//调试的组件名
let ajaxUrl=url.replace("?plugin="+pluginName,"?").replace("&plugin="+pluginName,"");//原页面url
let t=Date.now();
$.ajax({
    url:ajaxUrl,
    type:"get",
    data:{
        t:t
    },
    success:function(data){
        if(!pluginName || pluginName==""){
            return;
        }
        let $data=$(‘<data>‘+data+‘</data>‘);
        let title=$data.find("title").text();
        let data_config=$data.find("#main").next().html();
        document.title=title;
        let css=document.createElement("link");
        css.rel="stylesheet";
        css.type="text/css";
        document.head.append(css)
        document.getElementById("data_config").append(data_config);
        let js=document.createElement("script");
        js.type="text/javascript";
        js.src="http://"+ip+":3334/pagejs/"+pluginName+".js?t="+t;
        document.body.append(js)
    },
    error:function(err){}
})

完!

原文地址:https://www.cnblogs.com/wuhairui/p/12092853.html

时间: 2024-10-11 17:14:15

【前端小记】从线上开发到本地化的相关文章

前端开发调试线上代码的两款工具

用过 Charles 和 Fiddler 这两款,记录如下. 一.Charles Charles 界面简单直观,易于上手,数据请求控制容易,修改也简单,抓取数据的开始暂停也方便.支持 win,mac,linux. 1. 安装前提Charles 需要有 Java 环境,请提前下载安装 JDK.JDK 已经 8 了. 根据自己的系统选择对应的JDK.我的是 win7,双击安装,一直下一步就哦了.在命令行窗口输入以下命令,出现截图所示就表示 JDK 安装成功了 2. 下载 Charles Charle

2019刘老师教你用springboot2.x开发整合微信支付的线上教育平台带源码送springboot2.x零基础入门到高级实战教程

第一部分:springboot2.x零基础入门到高级实战教程一.零基础快速入门SpringBoot2.0 1.SpringBoot2.x课程全套介绍和高手系列知识点 简介:介绍SpringBoot2.x课程大纲章节 java基础,jdk环境,maven基础 2.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 3.快速创建SpringBoot2.x应用之手工创建web应用 简介:使用Maven手工创建SpringBoot2.x应用 4

手机线上决战万圣夜游戏APP开发步骤

时下广州龙其仕有一种手机线上决战万圣夜游戏APP和推币游戏是异常火热,广州龙其仕经过线上娃娃机的过渡期之后毅然选择开发直播推币机游戏,寻找一个突破口,前期市场目光敏锐的公司很早就已经把APP上架到各大应用市场,而且耗时很短,通过率也很可观. 不过经过一年的沉淀之后,随着越来越多的企业进驻这类马戏团推币游戏,上架对于他们来讲越来越难,多次提交还是被驳回,对于APP的发展出现很大的阻碍! 视频直播手机线上决战万圣夜游戏APP开发技术其实就是通过物联网技术实现智能控制线下设备技术,其本质是物联网APP

配置开发环境测试环境线上生产环境

1.正确打包 项目有三种环境: 1.本地开发环境(local) 2.开发测试环境(dev) 3.线上生产环境(product) 不同的环境有不同的配置,比如数据库连接什么的....maven打包时默认去resources文件夹下打包这些配置文件,放在WEB-INF/classes下,然后再打成war包,就能用了...现在通过修改pom.xml文件,增加三种配置,让maven打包时选择打包不同文件夹下的配置文件到WEB-INF/classes下,这样就省事儿了.... 如图所示,resources

记Booking.com iOS开发岗位线上笔试

今晚参加了Booking的iOS职位线上笔试,结束后方能简单归纳一下. 关于测试内容: Booking采用了HackerRank作为测试平台,测试总时长为75分钟,总计4道题. 测试之前我很紧张,因为根据之前参加微软的Online Test经验来看,应该会有一些复杂的算法题.但是事实上Booking测试的题目,前三题均没有涉及高深的算法,都是一些基础的Objective-C和iOS开发的知识,这反而带了更大的困惑,想的太多反而浪费了大量时间. 测试邀请邮件 最后的结果是完成了3/4,因为时间没了

Java 开发必须掌握的线上问题排查命令

作为一个合格的开发人员,不仅要能写得一手还代码,还有一项很重要的技能就是排查问题.这里提到的排查问题不仅仅是在coding的过程中debug等,还包括的就是线上问题的排查.由于在生产环境中,一般没办法debug(其实有些问题,debug也白扯...),所以我们需要借助一些常用命令来查看运行时的具体情况,这些运行时信息包括但不限于运行日志.异常堆栈.堆使用情况.GC情况.JVM参数情况.线程情况等. 给一个系统定位问题的时候,知识.经验是关键,数据是依据,工具是运用知识处理数据的手段.为了便于我们

软件开发交易线上服务_威客平台

革新威客行业的软件开发线上服务交易平台--大大神,在威客行业中现在主要的模式是以移动互联网+线上服务交易+任务发布为主的行业模式.威客行业在不断扩张,但却没有突破重围,达到一个新的高度.大大神平台作为了领先人物突破了威客行业的这个重围.什么是威客?威客是指通过互联网把自己的智慧.知识.能力.经验转换成实际收益的人,他们在互联网上通过解决科学,技术,工作,生活,学习中的问题从而让知识.智慧.经验.技能体现经济价值.因为诚信和制度的问题存在很大弊病,导致工作者成廉价劳动力,各种欺骗行为层出不穷.目前

线上教育app开发应该具备哪些功能

线上教育app开发应该具备哪些功能 互联网+教育对传统教育产生了相应的冲击,尤其现在移动互联网迅猛发展.越来越多的企业将目标转向线上教育APP,都希望通过在线教育APP占领一块市场.分得一杯羹.那么开发在线教育APP,一时间成为热门问题,但是很多传统企业没有互联网经验,在开发教育APP中就显得很被动,今天我们就教育APP的一个切入点来进行分析,看看教育APP应该具备什么功能. 教育app开发的必要功能主要有: 1.课程展示:课程展示可以说是个窗口,可以展示每一个学习的课程,也可以通过分类搜索,上

HiEX平台线上挖矿商城软件定制开发

HiEX区块链挖矿理财系统app开发( 董经理 156微9242电2517同号).HiEX平台持币挖矿代币理财系统开发.HiEX平台挖矿持币生息理财app系统开发.HiEX平台线上挖矿商城APP定制开发HiEX区块链模式开发,HiEX挖矿app定制开发 新时期,软件技术发展势头强劲,是创新计算机网络技术,逐步将一些远程控制.网络支持成为可能.但在开发软件技术的同时,也忽略了管理工作的重要意义.因为软件工程自身的特殊性,而且发展的时间也不长,其管理工作涉及面比较复杂,所以随着技术的发展,计算机软件