nej 搭配 vue 方案
此文已由作者张磊授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
前言
目前项目使用的技术是 nej + regular,路由方面是使用 nej 自带的,随着时间推移,项目已经上线很多模块,这时想尝试新技术,不可能推倒重来,只能边做边重构。想引入新技术,比如引入 vue,那么就会遇到一个问题,如何和已有的代码进行融合。
方案
方案整理下来有两种:
代码整合写在一起
需要考虑的点:代码耦合在一起,在项目重构后期,需要剥离代码,那么就应该提前设计好方案,方便后续剥离代码。新模块代码通过 iframe 加载引用
好处的话,代码隔离,相当于新启一个项目,没有包袱,但坏处也有,由于加载时间过长会有一定时间的白屏。同时需要做好主页面和子页面的消息通知机制。
说明
这两种方案,都有特殊的一点,需要由 nej 路由去驱动 vue 路由。这样设计的目的,一方面在方案1的情况下,两个路由系统不会冲突,同时监听 location 变化,可能会出意料之外的问题;另一方面即使解决上一个问题,同时还需要适配 nej 路由的写法;再者,在后期即使想下掉 nej 路由,也只需要修改少量的代码即可;再者想在 url 处展示参数变化,也只需要做好同步机制,修改一个即可。那么想达到这样的方案,就需要其中一个路由系统可以不监听 location 的改变,刚好 vue-router 是支持的。有了 abstract 模式,就可以完美解决路由冲突。
实现
目前实现了 方案1 的 demo。
首先在 nej 路由指定好路由起点
['/m/demo/', 'demo', 'module/demo/tmp.html', 'demo', ''],
['/m/demo2', 'demo', 'module/demo/tmp.html', 'demo2', ''], // 加不加最后的 / 是有区别的剩下的需要修改的文件均在这个链接的 demo 文件夹下,下载后放置正确即可。
运行后,会发现只能运行一次,第二次进入页面会失效。这个问题的原因是 nej 会缓存当前页面的 dom,结果把上次 vue 的内容给缓存下来了,再次进来的时候,相当于有两份相同的 dom, 导致页面无法正常显示。解决问题的办法也很简单,找到 regularModule.js,添加 __resetBody 方法的调用。__resetBody 的方法已经写在 demo/index.js 内了。
_pro.__build = function () {
+ this.__resetBody();
+ _pro.__resetBody = function __resetBody(params) {
+ if (this._$$InnerModule.__resetBody) {
+ this.__body = this._$$InnerModule.__resetBody(this.__body);
+ }
+ };
问题
方案1下如何正确解析打包 .vue 文件进行打包,目前想到的办法,可能需要对 vue 打包一次,再用 nej 打包一次。或者如 demo 中的那种写法;再者也可以把项目的打包方案切换成 webpack
动图
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 MongoDB复制集成员及状态转换
nej 搭配 vue 方案的更多相关文章
- 安装搭配VUE使用的UI框架ElementUI
可以搭配vue的UI框架有几个,我用的是element-ui,现在呢,我要在复习一遍 1.vue init webpack-simple element-ui2.cd element-ui3.npm ...
- ThinkJS前端搭配vue时的Nginx配置
Thinkjs 作为奇舞团开源的nodejs mvc框架之一,引起了很多NodeJS程序员的亲赖.但是其关于静态文件处理部分支持不够完善,主要是体现在SPA单页应用,之前在ThinkJS 2.*版本时 ...
- Redux/Mobx/Akita/Vuex对比 - 选择更适合低代码场景的状态管理方案
近期准备开发一个数据分析 SDK,定位是作为数据中台向外输出数据分析能力的载体,前端的功能表现类似低代码平台的各种拖拉拽.作为中台能力的载体,SDK 未来很大概率会需要支持多种视图层框架,比如Vue2 ...
- vue路由异步组件案例
最近研究了vue性能优化,涉及到vue异步组件.一番研究得出如下的解决方案. 原理:利用webpack对代码进行分割是异步调用组件前提.异步组件在优先级上让位同步组件.下面介绍的是怎么实现异步组件. ...
- Vue学习记录-画页面
webstorm 因为之前开发ReactNative的时候,选择了webstorm,这回转战Vue,自然还是用它.如果什么也不做的话,打开Vue工程,编辑区域基本上没有语法高亮.怎么办呢? 安装插件( ...
- vue post请求 参数带有中文后端无法接收或者收到乱码,无法返回数据问题
问题来源: 在使用axios时,和java联调,发现调接口服务器始终拿不到参数data,但是检查network也的确传了data,才有了该文章. 基于 vue-axios 和 $.ajax 两种请求方 ...
- 关于 Vue 中 h() 函数的一些东西
最近在项目上需要一个信息弹窗,来显示信息.一开始只让它弹出了文字,而且只有一条信息.而给我的需求是多条文字和图片,而后我使用了element ui中的 Notification 通知组件来显示.当然, ...
- [题解]noip2016普及组题解和心得
[前言] 感觉稍微有些滑稽吧,毕竟每次练的题都是提高组难度的,结果最后的主要任务是普及组抱一个一等奖回来.至于我的分数嘛..还是在你看完题解后写在[后记]里面.废话不多说,开始题解. 第一题可以说的内 ...
- 图表控件== 百度 echarts的入门学习
花了3天的时间 去学习跟试用之前两款的图表控件 hightcharts(商业,人性化,新手非常方便试用,图表少了点) 跟chartjs==>搭配vue更好 控件,整体而言都还可以. http:/ ...
随机推荐
- 分享知识-快乐自己:Liunx-大数据(Hadoop)初始化环境搭建
大数据初始化环境搭建: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘 ...
- 开发人员需要具备的DBA技术
背景 在一些小公司或者部门里,通常很少有专门的DBA职位.这时候就需要我们这些程序员充当业余DBA的作用,去监测和维护数据库性能.本文的目的是帮助非DBA专业的开发人员如何定位和解决日常出现数据库问题 ...
- (转)gcov、lcov与genhtml 使用心得
gcc是linux平台下的C.C++ 编译器 gcov是配合gcc产生覆盖信息报告的工具: lcov是将gcov产生的报告信息,以更直观的方式显示出来工具 基本的使用方法分为4个阶段: (一).gcc ...
- javascript按位操作符操作以及用途
所有的按位操作符的操作数都会被转成补码(two's complement)形式的有符号32位整数.正数的补码是自己本身,负数的补码是取反后加一,所以经过操作运算后的值是补码形式. 描述 按位与( AN ...
- nodejs cluster 学习记录
最近在使用 egg.js ,这个框架提供多进程管理机制 我们知道 JavaScript 代码是运行在单线程上的,换句话说一个 Node.js 进程只能运行在一个 CPU 上.如何榨干服务器资源,利用上 ...
- STL stl_uninitialized.h
stl_uninitialized.h // Filename: stl_uninitialized.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com ...
- Android开发中高效的数据结构
android开发中,在java2ee或者android中常用的数据结构有Map,List,Set,但android作为移动平台,有些api(很多都是效率问题)显然不够理想,本着造更好轮子的精神,an ...
- Agc_006 E Rotate 3x3
题目大意 给定一个$3\times N$的方阵,每个位置的数恰好是每一个$[1,3\times N]$中的数. 初始时,每个位置$[x,y]$填的是$3(y-1)+x,(1\leq x\leq N,1 ...
- Gym - 100570C: Subrect Query (巧妙的单调队列)
De Prezer loves rectangles.He has a n × m rectangle which there is a number in each of its cells. We ...
- Gym - 100851J: Jump(交互+构造+(大胆瞎搞)))
题意:给定长度为N的01串,现在让你猜这个串,猜的次数要不超过N+500次. 每次你猜一个串,系统会返回N/2,或N,或0.当且当有N/2个位置猜对,N个位置猜对,其他. 思路:因为信息不多,没有关联 ...