跟我说说什么是惊喜

114 阅读2分钟

防抖:频繁中的频繁。 快速特别快速。 eg: 比如一个搜索框 搜索值每次都请求后台 此时监听你是输入了几个就监听了几次 使用keyup。对快速操作进行防抖动:学名防抖 y 100毫秒 先不发 等待下一次请求 如果true取消上一次请求 走下一次 如此反复。在拿到两个值一起请求

Webpack 五个核心

Entry

入口,指示webpack以哪个文件为入口起点开始打包,分析构建内部依赖图

Output

输出,指示webpack打包后的资源bundles输出到哪里去,以及如何命名

Loader

Loade让webpack能够去那些非javascript文件(webpack自身只处理js文件)翻译官

plugins

插件可以用于执行范围更广的任务,插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量等。

Mode

模式:分为两种 development(开发模式)和production(生产模式)
dev:能让代码本地调试运行的环境
pro:能让代码优化上线运行的环境

webpack不能处理css、img资源 所以要进行相应配置

用的是Common.js

loader的使用一般都是 1.下载 2.使用(配置loader)plugins: 1.下载 2.引入 3.使用

// 使用node.js resolve拼接 获取绝对路径
const resolve = resolve('path')
// const htmlwebpackPlugin = require('html-webpack-plugin')
// 配置
module.exports = {
    //入口文件
    entry: './src/index.js',
    // 输出
    output:{
       // 输出文件名
        filename: 'build.js',
       // 输出的路径 绝对路径  
       // __dirname 是node.js变量,代表当前文件的目录的绝对路径 会输出到build目录下 叫build.js文件
        path: resolve(__dirname,'build'),
    },
    // loader配置
    module:{
        // 规则
        rules:[
        // 详细的loader配置
        // 不同文件必须配置不同loader处理
            {
                // 正则 匹配哪些文件
                test: /\.css$/,
                // 怎么处理呢 通过use处理
                //使用哪些loader进行处理
                use: [
                    // use数组中loader执行顺序,从右到左,从下到上 依次执行
                    // 上一步完成后,创建style标签,将生成好的js中的样式资源插入进去,添加到head生效
                    'style-loader',
                    // 将css文件变成commonjs模块加载js中,里面内容是样式字符串
                    'css-loader',
                    
                ]
            },
            {
                test: /\.less$/,
                use:[
                    'style-loader',
                    'css-loader',
                    // 将less文件编译成css文件
                    // 需要下载less-loader 和less
                    'less-loader',
                ]
            },
            {
                // 问题:处理不了html中img图片 只能处理css中引入图片
                test: /\.(jpg|png|gif)$/,
                // 需要下载file-loader 和url-loader 因为file-loader是依赖url-loader
                loader: 'url-loader',
                // loader的配置
                options:{
                    // 图片大小限制,小于8kb就会被base64处理
                    // 优点:减少请求数量(减轻服务器压力)
                    // 缺点:图片体积会更大
                    limit: 8 * 1024
                    // url-loader 默认使用es6模块化解析,而html-loader引入图片是commonjs 所以解析会报错
                    // 解决:关闭url-loader模块化,使用commonjs解析
                    esModule:false,
                    //给图片重命名 [hash:10] 取图片的前10位 ext取文件原扩展名
                    name: '[haseh:10].[ext]',
                    // 给图片增加目录结构
                    outputPath: 'imgs',
                }
            },
            {
                test: /\.html$/,
                // 处理html中img图片的(负责引入img,从而能被url-loader处理)
                loader: 'html-loader'
            },
            
            // 打包其他配置(除了html/js/css资源以外的资源)
            {
                // 排除资源
                exclude: /\.(css|js|html)$/,
                loader: 'file-loader',
            }
        ]
    },
    // 插件
    plugins: [
        //打包html资源
        // 默认会创建一个空的html 引入打包输出的所有资源 (JS/CSS)
        // 需要有结构的html文件
        new htmlwebpackPlugin({
            // 复制一个html文件 并自动引入打包输出所有资源
            template : './src/index.html'
        })
    ],
    
    //模式
    mode: 'development',
    mode: 'prodeuction',
    
    // 开发服务器devServer:用来自动化(自动编译,自动打开浏览器,自动刷新浏览器)
    // 特点:只会在内存中编译打包,不会有任何输出
    // 启动devServer指令为:webpack-dev-server
    devServer:{
        // 运行项目的目录
        contentBase:resolve(__dirname,'build'),
        //启动gzip压缩
        compress: true,
        port: 3000,
    }
    
    
}