Webpack相关

  1. webpack的工作原理 WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Sass,TypeScript等),并将其转换和打包为合适的格式供浏览器使用。在3.0出现后,Webpack还肩负起了优化项目的责任。

  2. webpack的构建流程

    1. 初始化参数:解析webpack配置参数,合并shell传入和webpack.config.js文件配置的参数,形成最后的配置结果。
    2. 开始编译:上一步得到的参数初始化compiler对象,注册所有配置的插件,插件监听webpack构建生命周期的事件节点,做出相应的反应,执行对象的 run 方法开始执行编译。
    3. 确定入口:从配置的entry入口,开始解析文件构建AST语法树,找出依赖,递归下去。
    4. 编译模块:递归中根据文件类型和loader配置,调用所有配置的loader对文件进行转换,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理。
    5. 完成模块编译:在经过第4步使⽤ Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系;
    6. 输出资源:根据⼊⼝和模块之间的依赖关系,组装成⼀个个包含多个模块的 Chunk,再把每个 Chunk 转换成⼀个单独的⽂件加⼊到输出列表,这步是可以修改输出内容的最后机会; 7.输出完成:在确定好输出内容后,根据配置确定输出的路径和⽂件名,把⽂件内容写⼊到⽂件系统。
  3. Webpack的基本功能有哪些?

    • 代码转换:TypeScript 编译成 JavaScript、SCSS 编译成 CSS 等等
    • 文件优化:压缩 JavaScript、CSS、html 代码,压缩合并图片等
    • 代码分割:提取多个页面的公共代码、提取首屏不需要执行部分的代码让其异步加载
    • 模块合并:在采用模块化的项目有很多模块和文件,需要构建功能把模块分类合并成一个文件
    • 自动刷新:监听本地源代码的变化,自动构建,刷新浏览器
    • 代码校验:在代码被提交到仓库前需要检测代码是否符合规范,以及单元测试是否通过
    • 自动发布:更新完代码后,自动构建出线上发布代码并传输给发布系统。
  4. 前端为什么要进行打包和构建? 代码层面:

    • 体积更小(Tree-shaking、压缩、合并),加载更快
    • 编译高级语言和语法(TS、ES6、模块化、scss)
    • 兼容性和错误检查(polyfill,postcss,eslint)

    研发流程层面:

    • 统一、高效的开发环境
    • 统一的构建流程和产出标准
    • 集成公司构建规范(提测、上线)
  5. Loader和Plugin的不同? 不同的作用

    • Loader直译为"加载器"。Webpack将一切文件视为模块,但是webpack原生是只能解析js文件,如果想将其他文件也打包的话,就会用到loader。 所以Loader的作用是让webpack拥有了加载和解析非JavaScript文件的能力。
    • Plugin直译为"插件"。Plugin可以扩展webpack的功能,让webpack具有更多的灵活性。 在 Webpack 运行的生命周期中会广播出许多事件,Plugin 可以监听这些事件,在合适的时机通过 Webpack 提供的 API 改变输出结果。

    不同的用法

    • Loader在module.rules中配置,也就是说他作为模块的解析规则而存在。 类型为数组,每一项都是一个Object,里面描述了对于什么类型的文件(test),使用什么加载(loader)和使用的参数(options)
    • Plugin在plugins中单独配置。 类型为数组,每一项是一个plugin的实例,参数都通过构造函数传入。
  6. 有哪些常见的Loader?他们是解决什么问题的?

    • file-loader:把文件输出到一个文件夹中,在代码中通过相对 URL 去引用输出的文件
    • url-loader:和 file-loader 类似,但是能在文件很小的情况下以 base64 的方式把文件内容注入到代码中去
    • source-map-loader:加载额外的 Source Map 文件,以方便断点调试
    • image-loader:加载并且压缩图片文件
    • babel-loader:把 ES6 转换成 ES5
    • css-loader:加载 CSS,支持模块化、压缩、文件导入等特性
    • style-loader:把 CSS 代码注入到 JavaScript 中,通过 DOM 操作去加载 CSS。
    • eslint-loader:通过 ESLint 检查 JavaScript 代码
  7. 有哪些常见的Plugin?他们是解决什么问题的?

    • define-plugin:定义环境变量
    • commons-chunk-plugin:提取公共代码
    • uglifyjs-webpack-plugin:通过UglifyES压缩ES6代码
对你有帮助?请作者喝杯咖啡~
 支付宝 支付宝
 微信 微信
0%