• 你需要知道的webpack高频面试题


    谈谈你对webpack的看法

    webpack是一个模块打包工具,可以使用它管理项目中的模块依赖,并编译输出模块所需的静态文件。它可以很好地管理、打包开发中所用到的HTML,CSS,JavaScript和静态文件(图片,字体)等,让开发更高效。对于不同类型的依赖,webpack有对应的模块加载器,而且会分析模块间的依赖关系,最后合并生成优化的静态资源。

    webpack的基本功能和工作原理?

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

    webpack构建过程

    • 从entry里配置的module开始递归解析entry依赖的所有module
    • 每找到一个module,就会根据配置的loader去找对应的转换规则
    • 对module进行转换后,再解析出当前module依赖的module
    • 这些模块会以entry为单位分组,一个entry和其所有依赖的module被分到一个组Chunk
    • 最后webpack会把所有Chunk转换成文件输出
    • 在整个流程中webpack会在恰当的时机执行plugin里定义的逻辑

    webpack打包原理

    将所有依赖打包成一个bundle.js,通过代码分割成单元片段按需加载

    什么是webpack,与gulp,grunt有什么区别

    • webpack是一个模块打包工具,可以递归地打包项目中的所有模块,最终生成几个打包后的文件。
    • 区别:webpack支持代码分割,模块化(AMD,CommonJ,ES2015),全局分析

    什么是entry,output?

    • entry 入口,告诉webpack要使用哪个模块作为构建项目的起点,默认为./src/index.js
    • output 出口,告诉webpack在哪里输出它打包好的代码以及如何命名,默认为./dist

    什么是loader,plugins?

    • loader是用来告诉webpack如何转换某一类型的文件,并且引入到打包出的文件中。
    • plugins(插件)作用更大,可以打包优化,资源管理和注入环境变量

    什么是bundle,chunk,module?

    bundle是webpack打包出来的文件,chunk是webpack在进行模块的依赖分析的时候,代码分割出来的代码块。module是开发中的单个模块

    如何自动生成webpack配置?

    可以用一些官方脚手架

    • webpack-cli
    • vue-cli
    // 首先安装
    npm install -g @vue/cli
    // 新建项目hello
    vue create hello
    
    • 1
    • 2
    • 3
    • 4
    • nuxt-cli
    // 确保安装了npx,npx在npm5.2.0默认安装了
    // 新建项目hello
    npx create-nuxt-app hello
    
    • 1
    • 2
    • 3
    参考webpack视频讲解:进入学习

    webpack如何配置单页面和多页面的应用程序?

    • 单个页面
    module.exports = {
       
        entry: './path/to/my/entry/file.js'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 多页面应用程序
    module.entrys = {
       
        entry: {
       
            pageOne: './src/pageOne/index.js',
            pageTwo: './src/pageTwo/index.js'
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    webpack-dev-server和http服务器如nginx有什么区别?

    webpack-dev-server使用内存来存储webpack开发环境下的打包文件,并且可以使用模块热更新,相比传统http服务器开发更加简单高效,

    什么是模块热更新?

    webpack的一个功能,可以使代码修改后不用刷新浏览器就自动更新,高级版的自动刷新浏览器

    dev-server是怎么跑起来的

    webpack-dev-server支持两种模式来自动刷新页面

    • iframe模式(页面放在iframe中,当发送改变时重载)
      无需额外配置,只要以这种格式url访问即可。http://localhost:8080/webpack-dev-server/index.html
    • inline模式(将webpack-dev-server的客户端入口添加到bundle中)
      inline模式下url不用发生变化,但启动inline模式分两种情况
    // 以命令行启动webpack-dev-server有两种方式// 方式1 在命令行中添加--inline命令// 方式2 在webpack-config.js添加devServer:{
       inline: true
    • 1
  • 相关阅读:
    Word控件Spire.Doc 【图像形状】教程(4) 用 C# 中的文本替换 Word 中的图像
    Go 语言中 panic 和 recover 搭配使用
    学习SpringMVC的第四天
    EalsticSearch
    常用的Selenium WebdriverAPI
    Linux常用命令
    SVG 避免锯齿
    《吐血整理》高级系列教程-吃透Fiddler抓包教程(25)-Fiddler如何优雅地在正式和测试环境之间来回切换-下篇
    辅助驾驶功能开发-功能规范篇(24)-2-影子模式功能触发规范
    go map fatal errorconcurrent map read and map write
  • 原文地址:https://blog.csdn.net/gogo2027/article/details/127886315