如果入口文件有依赖别的文件,再次执行 2 - 4步骤,把入口文件换成依赖的文件就好,例如,路由一般都是懒加载的,所以在访问指定路由时,webpack打包出来也会获取这个对应的路由文件,依赖到入口文件里面。
通过沙盒环境执行获取到的返回结果,在vue-hackernews-2.0项目中是 new Vue实例对象。
解析这个vue实例,获取到对应的html字符串,放入html模板中,最后返回给前端。
这样就实现了读取内存文件,得到对应的html数据。主要就是通过 vm模块跟module模块来执行这些代码的。其实这块的整个代码也还是比较简单的。并没有什么复杂的逻辑。
因为项目是基于react和webpack5的,所以在代码的处理上会有些不同,但是实现方案基本还是一致的。
其实说到执行代码,js里面还有一个方法可以执行代码,就是eval方法。但是eval方法在require的时候都是在本地模块中进行查找,存在于内存中的文件我发现没法去进行require查找。所以还是用的vm模块来执行的代码,毕竟可以重写require方法
项目完整代码:GitHub 仓库
博客原文地址
我自己新创建了一个相互学习的群,无论你是准备入坑的小白,还是半路入行的同学,希望我们能一起分享与交流。
QQ群:810018802, 点击加入
前端打杂群
冬瓜书屋