webpack的构建流程是什么?

初始化参数:从配置文件和 Shell 语句中读取与合并参数,得出最终的参数; 开始编译:用上一步得到的参数初始化 Compiler 对象,加载所有配置的插件,执行对象的 run 方法开始执行编译; 确定入口:根据配置中的 entry 找出所有的入口文件; 编译模块:从入口文件出发,调用所有配置的 Loader 对模块进行翻译,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理; 完成模块编译:在经过第4步使用 Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系; 输出资源:根据入口和模块之间的依赖关系,组装成一个个包含多个模块的 Chunk,再把每个 Chunk 转换成一个单独的文件加入到输出列表,这步是可以修改输出内容的最后机会; 输出完成:在确定好输出内容后,根据配置确定输出的路径和文件名,把文件内容写入到文件系统。
web内置的内容

babel 转码器

webpack 常用插件

webpack加载任何类型的文件都需要一个loader

解析css

需要用到 style-loader css-loader

  1. {
  2. test:/\.css$/,
  3. loader:['style-loader','css-loader']
  4. }

解析图片,解析矢量字体图标

需要用到 url-loader

  1. {
  2. test:/\.(jpg|jpeg|png|gif|eot|ttf|woff|woff2|svg)$/,
  3. loader:'url-loader'
  4. }

解析sass

需要用到 sass-loader
严重依赖于node-sass 将sass文件转码为 css

  1. {
  2. test:/\.(sass|scss)$/,
  3. use:['sass-loader','style-loader','css-loader']
  4. }

解析html

  1. const htmtWebpackPlugin = require('html-webpack-plugin');
  2. plugins:[
  3. new htmtWebpackPlugin({
  4. filename:"index.html",
  5. //如果是通过devserver打开页面,devserver会自动创建一个空的html
  6. template:"index.html"
  7. })
  8. ]

解析js

需要用到babel的全家桶
babel核心

babel 6.0 vue脚手架在使用

  • babel-cli babel的命令行执行程序
  • babel-core babel转码的核心库
  • bebel-preset-env babel的转码规则
  • babel-loader@7

babel 7.0 react脚手架在使用

  • @babel/cli babel的命令行执行程序
  • @babel/core babel转码的核心库
  • @babel/preset-env babel的转码规则
  • babel-loader
    {
        test:/\.(js|jsx)$/,
        loader:'babel-loader'
    }

启动服务

需要用到 webpack-dev-server

    devServer: {
        host: config.host,
        port: config.port,
        // contentBase: path.join(__dirname, 'dist'),
        //开启服务器端gzip压缩,加快服务器端响应速度
        compress: true,
        //编译过程中的进度条
        progress: true,
        //编译过程有彩条
        // color: true,
        //自动打开页面
        open: false,
        //开启模块的热替换,同时在plugins中需要new 一下
        hot: true,
        historyApiFallback: true,
        noInfo: true,
        //当客户端请求服务端才去渲染
        // lazy: true,
        // 当页面有报错,将报错信息显示到页面
        overlay: true,
        index: 'index.html',
        //before将返回一个expre的实例
        //express 是nodejs小型web服务器
        before(app) {
            app.get('/api', (req, res) => {
                res.json({
                    code: 1,
                    data: [{
                        name: "zhangsan",
                        age: 25
                    }, {
                        name: "lisi",
                        age: 20
                    }]
                })
            })
        }
    }