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:/ ...
随机推荐
- 也来谈幂等和CAS
什么是幂等? 一个方法,不管你执行多少次,保证执行的结果总是相同的.这种方法或者服务就是幂等的. 什么是CAS? CAS是Compare And Set的缩写,顾名思义,就是先比较再设置,这种方式避免 ...
- 分享知识-快乐自己:Mybatis 基础动态语句
目录: User: package mlq.bean; /** * 用户实体类 */ public class User { private Integer uId; private String u ...
- Java_基础_02_ThreadLocal
二.参考资料 1.ThreadLocal 那点事儿 2.彻底理解ThreadLocal
- 时间复杂度O(n)与空间复杂度O(1)
把输入规模看成x轴,所花时间/空间看成y轴.O(n)就是 y = x, y随x的增长而线性增长.一条斜线O(1)就是 y = 1,不管x如何变,y不变.一条与x平行的线 举个简单的例子,要从0加到n, ...
- 使用myeclipes制造属于自己的jar
选定你需要在jar中包含的package或者class 步骤1:右键export导出, 步骤2:导出类型为java --JRE file. 步骤3:直接finish即可完成 如果希望你的jar带源码 ...
- leetcode 226. Invert Binary Tree(递归)
Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia:This problem was ...
- C++11特性 gcc源码包
1.下载gcc最新的源码包 2.解压缩 tar -xf gcc-4.9.1.tar.gz 3. cd gcc-4.9.1 4.运行download_prerequisites脚本, ./contri ...
- ffmpeg命令选项解释
ffmpeg作为媒体文件处理软件,基本用法如下: ffmpeg -i INPUTfile [OPTIONS] OUTPUTfile 输入输出文件通常就是待处理的多媒体文件了.可以是纯粹的音频文件,纯粹 ...
- C#连接solr时提示 java内存异常 (jetty和tomcat哪个更High) java.lang.OutOfMemoryError
C#连接solr时提示 java内存异常 java.lang.OutOfMemoryError 时间:20180130 09:51:13.329,消息:异常消息<?xml version=& ...
- bzoj 4500: 矩阵 差分约束系统
题目: Description 有一个n*m的矩阵,初始每个格子的权值都为0,可以对矩阵执行两种操作: 选择一行, 该行每个格子的权值加1或减1. 选择一列, 该列每个格子的权值加1或减1. 现在有K ...