大话webpack-完善功能

前言

在小编的上一篇博客分析之中咱们的webpack工具已经能够帮咱们实现最基本的前端页面需求,咱们本身搭建的webpack怎能这么low呢,今天再来二次完善一下咱们的工具包,这篇分享是衔接上一篇文章的。javascript

二次大话


完善搭建

1、静态资源调用

在主页中引入已有的静态资源文件,咱们在public栏中放入js文件夹(用于存放已有的静态资源文件),index文件直接引入,那可不会容许你这样。webpack:我都已经跟你把转义和输出都写好了,你还本身引入文件,我才不在帮你把外部文件再转义好加进来了呢,太麻烦我了?那只能再给他买上礼物(安装插件),安抚一下了。 css

该插件咱们实现将咱们的静态资源目录拷贝到咱们打包后的dist文件目录下,打包后就直接调用。

npm install copy-webpack-plugin -D
复制代码

一样的引入以后咱们配置一下webpack.config.js文件html

const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
    plugins: [
        new CopyWebpackPlugin([
            {
                from: 'public/js/*.js',
                to: path.resolve(__dirname, 'dist', 'js'),
                flatten: true, // 该参数设置拷贝时不会把整个文件目录拷贝下来
            },
        ], {
            ignore: ['alone.js'] // 这边是筛选参数,写进去public下该文件不会被拷贝过去,能够没有需求能够不设置
        })
    ]
}
复制代码

2、抽离CSS文件并压缩

咱们知道没有抽离出来CSS文件打包,打包后样式实现是最后的js文件去实现,这样能够分担一下打包成的js文件的容量,一样的抽离出来的CSS文件咱们也进行依稀压缩,导入插件前端

npm install mini-css-extract-plugin -D
复制代码

再次配置一下webpack.config.js文件java

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
    plugins: [
        new MiniCssExtractPlugin({
            filename: 'css/[name].css'
        })
    ],
    module: {
        rules: [
            {
                test: /\.(le|c)ss$/,
                use: [
                    MiniCssExtractPlugin.loader, //替换以前的 style-loader
                    'css-loader', {
                        loader: 'postcss-loader',
                        options: {
                            plugins: function () {
                                return [
                                    require('autoprefixer')({
                                        "overrideBrowserslist": [
                                            "defaults"
                                        ]
                                    })
                                ]
                            }
                        }
                    }, 'less-loader'
                ],
                exclude: /node_modules/
            }
        ]
    }
}
复制代码

引入压缩插件node

npm install optimize-css-assets-webpack-plugin -D
复制代码

而后配置引用一下该插件webpack

//webpack.config.js
const OptimizeCssPlugin = require('optimize-css-assets-webpack-plugin');

module.exports = {
    plugins: [
        // 这边直接调用就行了不须要调配什么参数
        new OptimizeCssPlugin()
    ],
}
复制代码

3、热更新

这是打包工具必备的一个功能,能让咱们修改代码保存之后自动更新,webpack插件中包含此功能对象咱们直接调用web

//webpack.config.js
const webpack = require('webpack');
module.exports = {
    //....
    devServer: {
        hot: true
    },
    plugins: [
        new webpack.HotModuleReplacementPlugin() //热更新插件
    ]
}
复制代码

4、多界面应用打包

到目前为止页面的功能已是基本完善,那么多页面webpack又是如何处理的呢?咱们直接定义多个入口文件实现多页面打包,在配置页面的时候咱们要加上chunks参数配置,要否则界面会将入口js文件都加载而没办法对应。npm

//webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: {
        index: './src/index.js',
        login: './src/login.js'
    },
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: '[name].[hash:6].js'
    },
    //...
    plugins: [
        new HtmlWebpackPlugin({
            template: './public/index.html',
            filename: 'index.html', //打包后的文件名
            chunks: ['index']
        }),
        new HtmlWebpackPlugin({
            template: './public/login.html',
            filename: 'login.html', //打包后的文件名
            chunks: ['login']
        }),
    ]
}
复制代码

总结

那么到这里基础架构功能已经完成了,后续就是对于webpack的一些优化措施。bash

相关文章
相关标签/搜索