• webpack学习笔记(一) 核心概念


    这篇文章我们先来简单看看 webpack 中几个的核心概念,并粗略学习一下配置文件的写法

    1、mode

    在 webpack 中有两种常见的模式,一种是 development(开发模式),一种是 production(生产模式)

    两种模式下都有对应的 webpack 内置优化

    • 在 development 模式下,process.env.NODE_ENV 的值将被设置为 development
    // webpack.development.config.js
    
    module.exports = {
    	mode: 'development'
    }
    
    • 在 production 模式下,process.env.NODE_ENV 的值将被设置为 production
    // webpack.production.config.js
    
    module.exports = {
    	mode: 'production'
    }
    

    2、entry

    entry 是 webpack 构建模块依赖图的起点

    webpack 会递归地寻找这个入口文件依赖的所有模块,并根据这些依赖关系构建出一个模块依赖图

    // webpack.config.js
    // 单个入口文件的简写语法
    
    module.exports = {
        entry: './src/index.js' // entry 属性指定入口文件路径
    };
    

    我们还能指定多个入口文件(这是一种可拓展的方式)

    对于每个入口文件,webpack 都会构建一个模块依赖图,这些依赖图是彼此分离、相互独立的

    // webpack.config.js
    // 多个入口文件的对象语法
    
    module.exports = {
        entry: {
            app: './src/app.js',
            vendors: './src/vendors.js'
        }
    };
    

    3、output

    output 是 webpack 打包之后输出的文件

    当 webpack 对一个入口文件构建好模块依赖图后,它会将所有模块打包成一个或多个文件输出

    // webpack.config.js
    
    module.exports = {
        entry: './src/index.js',
        output: { // output 属性指定打包之后的文件放在什么位置
            // filename 属性指定输出文件的文件名称
            filename: 'bundle.js',
            // path 属性指定输出目录的绝对路径
            path: '/dist'
        }
    };
    

    对于多个入口文件情况,output 也只能指定一个输出配置

    此时应该使用 占位符 来确保每个文件具有唯一的名称

    // webpack.config.js
    
    module.exports = {
        entry: {
            app: './src/app.js',
            search: './src/vendors.js'
        },
        output: {
            filename: '[name].js',
            path: __dirname + '/dist'
        }
    }
    

    4、loader

    loader 用于对模块的源代码进行转换

    因为 webpack 只能理解 JavaScript,所以需要 loader 将其它类型的文件转化为 webpack 能够处理的有效模块

    不同的 loader 完成不同的任务,下面的例子指定使用 style-loader 和 css-loader 处理 CSS 文件

    // webpack.config.js
    
    module.exports = {
        entry: './src/index.js',
        output: {
            filename: 'bundle.js',
            path: '/dist'
        },
        module: {
            // rules 属性用于定义处理规则
            // 它是一个数组,其中的每一个项是一个对象,定义一条处理规则
            rules: [
                {
                    // test 属性用于标识应该处理哪些文件
                    // 它可以是一个正则表达式
                    test: /.css$/,
                    // use 属性用于指定应该使用哪些 loader
                    // 它是一个数组,其中的每一个项是一个对象,指定一个 loader
                    use: [
                        {
                            // 需要安装 style-loader
                            // npm install --save-dev style-loader
                            loader: 'style-loader'
                        },
                        {
                            // 需要安装 css-loader
                            // npm install --save-dev css-loader
                            loader: 'css-loader',
                            options: { // options 属性用于传入额外的配置
                            	modules: true
                            }
                        }
                    ]
                }
            ]
        }
    }
    

    5、plugin

    plugin 用于处理一些拓展任务,从打包优化和压缩,一直到重新定义环境中的变量

    // webpack.config.js
    
    // 内置插件
    const webpack = require('webpack')
    // 外部插件,需要通过 npm 安装
    const HtmlWebpackPlugin = require('html-webpack-plugin')
    
    module.exports = {
        entry: './src/index.js',
        output: {
            filename: 'bundle.js',
            path: '/dist'
        },
        module: {
            rules: [
                {
                    test: /.(js|jsx)$/,
                    use: 'babel-loader'
                }
            ]
        },
        plugins: [
            // 由于插件可以携带参数,所以我们需要传入一个 new 实例
            new webpack.optimize.UglifyJsPlugin(),
            new HtmlWebpackPlugin({template: './src/index.html'})
        ]
    }
    

    【 阅读更多 webpack 系列文章,请看 webpack学习笔记

    版权声明:本博客属于个人维护博客,未经博主允许不得转载其中文章。
  • 相关阅读:
    C# Excel工作表区域Range装入数组
    【Word VBA】批量插入图片到表格
    C# Office Com 开发 创建任务窗格 CustomTaskPane
    C# Office Com 开发 Excel插件与函数dll注册
    视频逐帧转换为图片
    ssh 免密登录
    NPS 内网穿透配置
    php7.3 centos Call to undefined function AdminControllermcrypt_get_block_size()
    Centos 6 安装 php7.3.x
    nginx配置之proxy_pass路径加斜杠/以及包含路径的区别
  • 原文地址:https://www.cnblogs.com/wsmrzx/p/11473777.html
Copyright © 2020-2023  润新知