- webpack 从 entry 出发,调用loader对模块的原始代码进行编译,接着调用acorn对js进行语法分析、收集其中的依赖关系,每个模块都会记录自己的依赖关系从而形成一颗关系树,最后调用compilation.seal进入render阶段根绝之前收集的依赖决定生成多少文件,每个文件的内容是什么。fis3 扫描项目目录拿到文件并初始化出一个文件对象列表,接着对文件对象中的每一个文件进行单文件编译,然后获取用户设置的package插件,进行打包处理。
浅谈Webpack工作流程
fis3前端工程化工具整理
fis3的工作原理:
fis3是真正地从前端工程化的角度出发,不单单是个打包工具,它基于文件对象进行构建,每个进入fis3的文件都会被实例化为一个file对象,整个构建流程都对这个对象进行操作完成构建任务。fis3没有入口文件的概念,是根据内置打包阶段生成的资源表定义之后的产出规则。
fis3的构建流程:
fis3将构建流程分为了单文件编译和打包两个阶段。单文件编译又分为了lint、parser、preprocessor、standard、postprocessor、optimizer六个阶段。打包分为prepackager、packager、spriter、postpackager四个阶段。
webpack和gulp的区别
webpack和gulp的区别的话,我是这么理解的:
gulp是个自动化构建的工具,gulp所做的工作就是对指定文件的代码进行压缩合并或者资源打包,所以我一般会在自己的个人项目规模不是很大的时候使用gulp来构建,完了在页面中引用就行了,这样子的目的就是单纯的减小文件体积;
而webpack我觉得就拿我们这个SPA项目来看的话:
浅谈Webpack模块化实现原理
先上总结吧,后面有代码分析:
总结:webpack的模块化原理是酱紫的——首先我们需要在webpack.config.js中取指定入口文件,完了分析webpack编译后的文件可以看到,整个文件由一个自执行函数包裹,入参是一个数组,这个数组包含了所有的模块,函数体的逻辑就是webpack的模块化逻辑。其中有一个函数叫webpack_require,参数为moduleId,然后在这个函数体的末尾调用了他传入参数为0并返回,这个0指代的模块就是我们的入口模块。也就是说,从入参的modules数组中取第一个函数进行调用,并传入了module,module.exports以及webpack_require这三个参数,然后你可以在入口函数的函数体内看到又调用了webpack_require(1)···等等来调用入口文件中所有后续需要的模块,这样就会引入后续的第二个第三个····函数,从第二个函数开始的入参exports,都是这个模块的module.exports通过对象的引用传参,这个模块中需要的其他模块也都是通过webpack_require来引的,最终会将module.exports return出来。
腾讯now直播一面笔试题再探
emmmmm,现在回过头来看腾讯面试题了,哇~ 想想当时的寄己,真的是基础不过关,也就只能现在弥补了!
看题——
1 | 写一个构造方法Point,要求实现以下功能: |
从ES5&ES6两方看继承(二)
接着上文,看ES6继承之Class & extends
1.基本语法
1 | class Point { |
super方法表示父类构造函数,调用时会新建父类的this对象。只有super方法才可以返回父类实例,所以调用super之后子类才可以使用this关键字。
JS深拷贝浅拷贝
git代码回滚
从ES5&ES6两方看继承(一)
原型和继承,是学习JS过程中相当重要并且难懂的点,第一次过这块的时候,完全是十脸懵逼的。之后因为准备春招,把这块的整个体系重新拜读了不下三次,才得以勉强面试。最近,也在学习ES6相关,看到Class的extend继承,就想对ES5的继承和ES6的继承做一比对和整理。好啦~正文开始······
首先,ES5继承
整理一下构造函数、原型对象和实例之间的关系:构造函数中有一个prototype的属性指向它自己的原型(prototype)对象,而原型对象中又有一个constructor属性指回构造函数,原型对象中定义实例共享的属性和方法,实例对象也总有一个prototype属性指向自己的默认原型对象。实例对象和原型对象均有prpto属性,它们的proto也都指向它的构造函数的原型对象。
注:JS中所有对象都有自己的proto属性,隐式指针,也就是后文中的[[prototype]]