webpack配置看这里就够了

栏目: 编程语言 · 发布时间: 5年前

内容简介:webpack简单来说就是一个模块打包器,也是目前最流行的前端构建工具之一,他将整个项目根据依赖关系通过各种loader与plugin的处理后进行打包;可以实现对代码的各种处理,比如less、sass、stylus的解析,ecmascript版本的转换、代码的压缩分割等等loader可以说是webpack最核心的部分,前面所说的各种功能大部分就是又他完成的;loader简单来说就是一个导出为函数的JavaScript模块,webpack会配置文件申明的倒序调用loader,传入资源文件,经loader处理后

webpack简述

webpack简单来说就是一个模块打包器,也是目前最流行的前端构建 工具 之一,他将整个项目根据依赖关系通过各种loader与plugin的处理后进行打包;可以实现对代码的各种处理,比如less、sass、stylus的解析,ecmascript版本的转换、代码的压缩分割等等

webpack之loader

loader可以说是webpack最核心的部分,前面所说的各种功能大部分就是又他完成的;loader简单来说就是一个导出为函数的JavaScript模块,webpack会配置文件申明的倒序调用loader,传入资源文件,经loader处理后传给下一loader或者webpack处理

常用loader

1.sass-loader、less-loader、stylus-loader、style-loader、css-loader

2.babel-loader

3.file-loader、url-loader

4.vue-loader

5.string-loader

webpack之plugin

plugin是webpack的重要组成部分,他能以各种钩子钩入每个编译(compilation)中触发的所有关键事件,插件都具备完全访问compiler对象的能力

常用plugin

1.HtmlWebpackPlugin

2.HotModuleReplacementPlugin

3.DefinePlugin

4.DllPlugin、DllReferencePlugin

以下是详细配置

{
    mode: 'development', // production:生产,会压缩代码;development:开发,不会压缩代码,便于debug
    
    devtool: 'inline-source-map',// 添加source map;便于debug,但会严重影响性能,千万不要在生产环境使用

    // webpack打包的入口
    entry: {
        app: './src/index.js', // 路径相对于package.json
        // app: ['./vue.js', './src/index.js']
    },

    // 文件输出
    output: {
        filename: '[name].js',
        path: path.resolve(__dirname, '../dist') // 输出的目录,默认为dist
    },
    optimization: {
        runtimeChunk: true,// 将webpack打包后的主文件单独分离,默认是将主文件放在入口文件当中,当需要在入口文件之前引入打包的公共代码时需要用到,此项建议对webpack有一定了解后再理解,关于打包后的代码分析我会单独写一篇

        // 抽离公共代码
        splitChunks: {
            cacheGroups: {
                vendor: { // 抽离第三方插件
                    test: /node_modules/, // 指定是 node_modules 下的第三方包
                    chunks: 'initial', // initial 对于异步导入的文件不处理;async 异步chunk,只对异步导入的文件处理;all 全部chunk
                    name: 'common/vendor', // 打包后的文件名,任意命名,会逆优化首屏加载的速度,慎用,建议每个公共代码块都单独抽离或者手动配置
                    priority: 10 // 设置优先级,防止和自定义的公共代码提取时被覆盖,不进行打包
                },
                utils: { // 抽离自定义公共代码
                    test: /\.js$/,
                    chunks: 'initial',
                    name: true, // 每个页面的包只包含需要的文件,不会影响首屏加载的速度,good job
                    minSize: 0 // 只要超出 0 字节就生成一个新包,默认30000B
                }
            }
        }
    },
    module: {
        rules: [

            // 打包css文件需要用到的loader
            // 注意:loader的执行顺序是后面的先执行
            //      style-loader必须在css-loader的前面
            {
                test: /\.css$/,
                use: [

                    // 将css文件以style标签形式插入
                    {
                        loader: 'style-loader',
                        options: {
                            singleton: true // 设置为true,多个css文件会在同一个style标签内
                        }
                    },
                    'css-loader'
                ],
                include: path.resolve(__dirname, '../src') // 只处理对应目录下的文件,构建性能提升
            },

            {
                test: /\.js$/,
                use: [
                    'babel-loader', // 配置babel转换代码
                ],
                exclude: path.resolve(__dirname, '../node_modules')
            }
        ]
    },
    plugins: [

        // 在每次打包前清理dist目录
        // 注意配置删除dist目录下的所有文件,而不是dist目录,因为当dist目录其他程序打开时将无法删除
        new CleanWebpackPlugin(['dist/*'], {
            root: path.resolve(__dirname, '../')
        }),

        // 用于处理入口html,如自动注入entry对应js,并拷贝至压缩目录等等
        new HtmlWebpackPlugin({
            template: './src/index.html',

            // 压缩html
            minify: {
                removeComments: true, // 删除注释
                collapseWhitespace: true, // 删除空格
                removeAttributeQuotes: true // 删除属性的引号
            }
        })
    ],
    
    // 配置后webpack会跳过对应模块的打包,当使用cdn时需要用到,此项能提升构建性能与前端性能
    externals: {
        vue: 'vue'
    }
}

以上所述就是小编给大家介绍的《webpack配置看这里就够了》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

即将到来的场景时代

即将到来的场景时代

罗伯特•斯考伯、谢尔•伊斯雷尔 / 赵乾坤 周宝曜 / 北京联合出版公司 / 2014-5-1 / 42

科技大神、全球科技创新领域最知名记者 罗伯特·斯考伯:“技术越了解你,就会为你提供越多好处!” 互联网的炒作点一个一个不停出现,大数据、3D打印、O2O等,无不宣扬要颠覆商业模式。但是,互联网进入移动时代,接下来到底会发生什么?移动互联网时代真正带来哪些改变?这具体会怎样影响我们每一个人的生活?商业真的会被颠覆?目前为止没有一本书给出答案。 《即将到来的场景时代》不是就一个炒作点大加谈......一起来看看 《即将到来的场景时代》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具