用webpack做一些前端打包时的性能优化

这篇具有很好参考价值的文章主要介绍了用webpack做一些前端打包时的性能优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.webpack 的五个核心概念

1.Entry:入口指示,webpack以哪个文件为入口起点开始打包,分析构建内部依赖图
2.output:输出指示,webpack打包后的资源bundles输出到哪里去,以及如何命名
3.loader :loader让webpack能够去处翻译理那些非js文件(img css…)
4.Plugins :Plugins插件可以用于执行范围更广的任务,打包优化和压缩等…
5.Mode :模式
1.development 开发模式 :能够让代码本地调试运行的环境
自动启用的一些插件
会将process.env.NODE_ENV的值设为development
启用NamedChunksPLugin和NamedModulesPlugin
2. production 生产模式
会将 process.env.NODE_ENV 的值设为 production。
启用 FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPlugin 和 UglifyJsPlugin

二.webpack开发环境打包样式资源

/*
  webpack.config.js webpack的配置文件
  作用:指示webpack干那些活,(当你运行webpack指令时,会加载里面的配置)

  项目里的src 里面是用的es6 的模块化,  webpack.config.js配置文件是基于Node.js模块化所以用的CommonJS的语法
*/
// function(exports, require, module, __filename, __dirname) {

//其实每个node.js模块都是包在这个引性的函数里面执行的
// exports 该对象用来将变量或函数暴露外面
//require 用来引入外部的模块
//module 代表的是当前模块本身,exports就是module的属性,及可以使用exports导入,可以用module.exports
//__filename 当前模块的完整路径
//__dirname当前模块所在文件夹的完整路径

// }
/*


webpack打包css准备步奏:

1.初始化包描述文件package.json 运行指令 :npm init (package name:webpack_test)
               
2. 先全局安装webpack和webpack-cli
     npm install webpack@4.41.6 -g
     npm install webpack-cli@3.3.11 -g

 3.再本地安装局部安装webpack和webpack-cli :表示项目开发期间的依赖,也就是:线上代码中用不到这些包了
 
     npm install webpack@4.41.6 --save-dev  (或使用简写-D也可以 npm i webpack -D)
     npm install webpack-cli@3.3.11 --save-dev   (或使用简写-D也可以 npm i )

 4.设置打包文件webpack.config.js 设置 ( webpack.config.js webpack的配置文件 作用:指示webpack干那些活,(当你运行webpack指令时,会加载里面的配置)

 5. 下载loader包
                  
                    查看webpack的版本号的命令:npm view webpack versions
                    查看less-loader的版本号命令:npm view less-loader versions

                  打包css需要下载的包:
                  
                   npm i css-loader@3.4.2 style-loader@1.1.3 -D  ( npm i css-loader style-loader -D )
                  

                  打包less需要下载的包;
                  
                   npm i less-loader@5.0.0 -D ( less-loader@5.0.0版本的需要下载less,10版本左右的不需要下less可以打包成功)
                   npm i less@3.11.1 -D

                
  6.运行命令: webpack 打包

 */


// resolve用来拼接绝对路径的方法
const { resolve } = require('path');

module.exports = {
    // webpack配置
    // 入口起点
    entry: './src/index.js',
    // 输出
    output: {
        // 输出文件名
        filename: 'built.js',
        // 输出路径
        // __dirname nodejs的变量,代表当前文件的目录绝对路径
        path: resolve(__dirname, 'build')
    },
    // loader的配置
    module: {
        rules: [
            // 详细loader配置

            // 不同文件必须配置不同loader处理
            {
                // css打包loader配置
                test: /\.css$/,
                // 使用哪些loader进行处理
                use: [
                    // use数组中loader执行顺序:从右到左,从下到上 依次执行
                    // 创建style标签,将js中的样式资源插入进行,添加到head中生效
                    'style-loader',
                    // 将css文件变成commonjs模块加载js中,里面内容是样式字符串
                    'css-loader'
                ]
            }, {

                // 匹配less文件
                test: /\.less$/,

                use: [
                    // 创建style标签,将js中的样式资源插入进行,添加到head中生效
                    'style-loader',

                    // 将css文件变成commonjs模块加载js中,里面内容是样式字符串
                    'css-loader',

                    //将less编译成css文件
                    'less-loader'
                ]


            }
        ]
    },


    // plugins的配置
    plugins: [
        //     // 详细plugins的配置
    ],


    // 模式
    mode: 'development' // 开发模式
        //  mode: 'production'
}

三.webpack 开发环境html文件打包

/*webpack打包HTML准备步奏:

1.初始化包描述文件package.json 运行指令 :npm init (package name:webpack_test)
               
2. 先全局安装webpack和webpack-cli
      npm install webpack@4.41.6 -g
      npm install webpack-cli@3.3.11 -g

3.再本地安装局部安装webpack和webpack-cli :表示项目开发期间的依赖,也就是:线上代码中用不到这些包了
       npm install webpack@4.41.6 --save-dev  (或使用简写-D也可以 npm i webpack -D)
       npm install webpack-cli@3.3.11 --save-dev   (或使用简写-D也可以 npm i )

4.设置打包文件webpack.config.js 设置 ( webpack.config.js webpack的配置文件 作用:指示webpack干那些活,(当你运行webpack指令时,会加载里面的配置)

5.  打包html需要安装plugins插件: npm i html-webpack-plugin@3.2.0 -D
   
6.运行命令: webpack 打包

*/



// resolve用来拼接绝对路径的方法
const { resolve } = require('path');

//引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {

    //入口
    entry: './src/index.js',

    //输出
    output: {
        // 输出文件名
        filename: 'built.js',
        // 输出路径
        // __dirname nodejs的变量,代表当前文件的目录绝对路径
        path: resolve(__dirname, 'build')
    },

    //lorder的配置

    module: {
        rules: [


        ]


    },

    // plugins的配置
    plugins: [
        // 详细plugins的配置
        // plugins的配置
        // html-webpack-plugin
        // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
        // 需求:需要有结构的HTML文件
        new HtmlWebpackPlugin({

            // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
            template: './src/index.html'
        })

    ],
    // 模式
    mode: 'development' // 开发模式
        //  mode: 'production'


}

四.webpack开发环境 img资源打包

/*打包CSS里面的图片和html里面的图片资源步奏

1.初始化包描述文件package.json 运行指令 :npm init (package name:webpack_test)
               
2. 先全局安装webpack和webpack-cli
      npm install webpack@4.41.6 -g
      npm install webpack-cli@3.3.11 -g

3.再本地安装局部安装webpack和webpack-cli :表示项目开发期间的依赖,也就是:线上代码中用不到这些包了
       npm install webpack@4.41.6 --save-dev  (或使用简写-D也可以 npm i webpack -D)
       npm install webpack-cli@3.3.11 --save-dev   (或使用简写-D也可以 npm i 
)

4.设置打包文件webpack.config.js 设置 ( webpack.config.js webpack的配置文件 作用:指示webpack干那些活,(当你运行webpack指令时,会加载里面的配置)

5. 下载loader包
                
                  打包css需要下载的包:
                  
                   npm i css-loader@3.4.2 style-loader@1.1.3 -D   
                   npm i css-loader style-loader -D  

                  打包less需要下载的包;
                  
                   npm i less-loader@5.0.0 -D ( less-loader@5.0.0版本的需要下载less,10版本左右的不需要下less可以打包成功)
                   npm i less@3.11.1 -D


                   打包html需要安装plugins插件: npm i html-webpack-plugin@3.2.0 -D

                   打包css或less插入的背景图片img下载的包 : npm i url-loader@3.0.0 file-loader@5.0.2 -D

                   打包html文件里面的img图片资源下载的包:npm i html-loader@0.5.5 -D

6.运行命令: webpack 打包

*/

// resolve用来拼接绝对路径的方法
const {
    resolve
} = require('path');

//引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {

    //入口
    entry: './src/index.js',


    //输出
    output: {
        // 输出文件名
        filename: 'built.js',
        // 输出路径
        // __dirname nodejs的变量,代表当前文件的目录绝对路径
        path: resolve(__dirname, 'build')
    },


    //lorder的配置

    module: {
        rules: [

            //处理less,loader
            {
                // 匹配less文件
                test: /\.less$/,
                //使用多个loader处理用use ,一个不需要用use
                use: [
                    // 创建style标签,将js中的样式资源插入进行,添加到head中生效
                    'style-loader',

                    // 将css文件变成commonjs模块加载js中,里面内容是样式字符串
                    'css-loader',

                    //将less编译成css文件
                    'less-loader'
                ]
            },

            //处理less或css背景插入的图片资源
            {
                test: /\.(jpg|png|gif)$/,

                //使用一个loader
                //需要下载 url-loader和 file-loader  (url-loader是依赖file-loader的所以的下两个包)
                loader: 'url-loader',
                options: {
                    //图片大小小于8kb,就会被base64处理
                    //优点:减少请求数量(减少请求压力)
                    limit: 8 * 1024,

                    //关闭url-loader的es6模块化,只为解析html里面插入的图片
                    esModule: false,

                    //给打包的图片进行重命名
                    //[hash:8]取图片的hash的前8位
                    //[ext]取文件原来扩展名
                    name: '[hash:8].[ext]'


                }
            },


            //问题:因为url-loader默认使用es6模块化解析,而html-loader引入的图片是common.js解析
            //解析时出现问题:[Object Module]
            //解决:关闭url-loader的es6模块化.使用commonjs解析 :esModule :false

            //处理html插入img图片资源的loader(配置完需要下载:html-loader)
            {
                test: /\.html$/,
                loader: 'html-loader'

            }

        ]


    },

    // plugins的配置
    plugins: [
        // 详细plugins的配置
        // plugins的配置
        // html-webpack-plugin
        // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
        // 需求:需要有结构的HTML文件
        new HtmlWebpackPlugin({

            // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
            template: './src/index.html'
        })

    ],
    // 模式
    mode: 'development' // 开发模式
        //  mode: 'production'

}

五.webpack 开发环境iocnfont图标其他资源打包

/*打包iconfont资源和其他资源

1.初始化包描述文件package.json 运行指令 :npm init (package name:webpack_test)
               
2. 先全局安装webpack和webpack-cli
      npm install webpack@4.41.6 -g
      npm install webpack-cli@3.3.11 -g

3.再本地安装局部安装webpack和webpack-cli :表示项目开发期间的依赖,也就是:线上代码中用不到这些包了
       npm install webpack@4.41.6 --save-dev  (或使用简写-D也可以 npm i webpack -D)
       npm install webpack-cli@3.3.11 --save-dev   (或使用简写-D也可以 npm i 
)

4.设置打包文件webpack.config.js 设置 ( webpack.config.js webpack的配置文件 作用:指示webpack干那些活,(当你运行webpack指令时,会加载里面的配置)

5. 下载loader包
                
                   打包css需要下载的包:
                  
                   npm i css-loader@3.4.2 style-loader@1.1.3 -D   
                   npm i css-loader style-loader -D  

                 
                   打包html需要安装plugins插件: npm i html-webpack-plugin@3.2.0 -D

                   打包字体图标iconfont下载的包 : npm i file-loader@5.0.2 -D



6.运行命令: webpack 打包

*/



const { resolve } = require('path')

//引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    //入口
    entry: {
        url: "./src/index.js"
    },

    //输出
    output: {

        //输出文件名
        filename: "build.js",
        //输出路径
        path: resolve(__dirname, 'build')

    },

    //Loader配置
    module: {

        rules: [{
                // css打包loader配置
                test: /\.css$/,
                // 使用哪些loader进行处理
                use: [
                    // use数组中loader执行顺序:从右到左,从下到上 依次执行
                    // 创建style标签,将js中的样式资源插入进行,添加到head中生效
                    'style-loader',
                    // 将css文件变成commonjs模块加载js中,里面内容是样式字符串
                    'css-loader'
                ]
            },

            //打包字体图标iconfont资源
            {
                //排除css|js|html
                exclude: /\.(css|js|html|less|img|json)$/,

                loader: 'file-loader',

                options: {

                    //给打包的图表进行重命名
                    //[hash:8]取图片的hash的前8位
                    //[ext]取文件原来扩展名
                    name: '[hash:8].[ext]'
                }

            }

        ]



    },


    //html插件
    // plugins的配置
    plugins: [
        // 详细plugins的配置
        // plugins的配置
        // html-webpack-plugin
        // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
        // 需求:需要有结构的HTML文件
        new HtmlWebpackPlugin({

            // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
            template: './src/index.html'
        })

    ],

    // 模式
    mode: 'development' // 开发模式
        //  mode: 'production'



六.webpack生产环境中CSS兼容性处理

//配置


//总结: 打包好js中的css提取成单独的css文件需要下面3步
//下载插件 :npm i mini-css-extract-plugin -D (兼容webpack4的版本 :npm i mini-css-extract-plugin@0.9.0 -D)
//const MiniCssExtractPlugin = require('mini-css-extract-plugin')  //引入下载好的插件
//MiniCssExtractPlugin.loader ,loader配置
/*
 new MiniCssExtractPlugin({
            //对单独提取出来的css文件重命名
            filename: 'css/built.css', //输出重命名
        })

*/

//处理css兼容性的步奏:
//下载包:npm i postcss-loader@3.0.0 postcss-preset-env@6.7.0 -D 
// css兼容性处理 loader配置:
/*
  {
                    loader: 'postcss-loader',
                    options: {
                        ident: 'postcss',
                        plugins: () => [
                            require('postcss-preset-env')()
                        ]
                    }
                }


*/
//在package.json中配置开发环境和生产环境兼容性样式的规则
// "browserslist": {
//      开发环境
//     "development": [
//         "last 1 chrome version",
//         "last 1 firefox version",
//         "last 1 safari version"
//     ],

//      默认是生产环境和 mode配置无关,如需兼容开发环境需要设置node环境变量:process,env.NODE_ENV ='development'
//     "production": [
//         ">0.2%",
//         "not dead",
//         "not op_mini all"
//     ]
// }


const { resolve } = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin');
//生产环境中JS中的CSS文件提取成单独文件 下载插件 :npm i mini-css-extract-plugin -D (兼容webpack4的版本 :npm i mini-css-extract-plugin@0.9.0 -D)
const MiniCssExtractPlugin = require('mini-css-extract-plugin') //MiniCssExtractPlugin引入

//设置node.js环境变量 ,让css 兼容package.json,browserlist中的开发模式(默认是走生产模式)
//process.env.NODE_ENV = 'development'
module.exports = {
    //入口路径
    entry: './src/js/index.js',
    //输出
    output: {
        filename: 'js/built.js', //输出文件名
        path: resolve(__dirname, 'build') //路径

    },
    //loeder配置
    module: {
        rules: [{
            //css打包验证规则
            test: /\.css$/,
            use: [
                // 'style-loader',  创建style标签, 将样式放入header中
                //因为要单独提取js中的css文件所以'style-loader'不需要了
                //MiniCssExtractPlugin.loader取代style-loader ,提取css成单独文件
                MiniCssExtractPlugin.loader,
                'css-loader', //将css文件整合到js中

                //css兼容性处理的loader配置
                {
                    //打包好的css兼容性处理 ,需要下载 postcss(postcss-loader包和postcss-preset-env插件)
                    loader: 'postcss-loader',
                    options: {
                        ident: 'postcss',
                        plugins: () => [
                            //postcss-preset-env插件帮助postcss找到package.json中browserlist里面的配置, 
                            //通过配置加载指定的兼容性样式
                            require('postcss-preset-env')()
                            // "browserslist": {
                            //      开发环境
                            //     "development": [
                            //         "last 1 chrome version",
                            //         "last 1 firefox version",
                            //         "last 1 safari version"
                            //     ],

                            //      默认是生产环境和 mode配置无关,如需兼容开发环境需要设置node环境变量:process.env.NODE_ENV ='development'
                            //     "production": [
                            //         ">0.2%", //大于98%的浏览器
                            //         "not dead", 
                            //         "not op_mini all" //除mini的浏览器
                            //     ]
                            // }
                        ]
                    }
                }
            ]
        }]
    },
    //插件
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html'
        }),
        new MiniCssExtractPlugin({
            //对单独提取出来的css文件重命名
            filename: 'css/built.css', //输出重命名
        })

    ],
    //开发模式
    mode: 'development'
}

七.webpack生产环境中CSS压缩

//压缩css需要下载的插件:optimize-css-assets-webpack-plugin : npm i optimize-css-assets-webpack-plugin@5.0.3 -D
//引入插件
const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin');

const { resolve } = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin');

//生产环境中JS中的CSS文件提取成单独文件 下载插件 :npm i mini-css-extract-plugin -D (兼容webpack4的版本 :npm i mini-css-extract-plugin@0.9.0 -D)
const MiniCssExtractPlugin = require('mini-css-extract-plugin') //MiniCssExtractPlugin引入

//设置node.js环境变量 ,让css 兼容package.json,browserlist中的开发模式(默认是走生产模式)
//process.env.NODE_ENV = 'development'
module.exports = {
    //入口路径
    entry: './src/js/index.js',
    //输出
    output: {
        filename: 'js/built.js', //输出文件名
        path: resolve(__dirname, 'build') //路径

    },
    //loeder配置
    module: {
        rules: [{
            //css打包验证规则
            test: /\.css$/,
            use: [
                // 'style-loader',  创建style标签, 将样式放入header中
                //因为要单独提取js中的css文件所以'style-loader'不需要了
                //MiniCssExtractPlugin.loader取代style-loader ,提取css成单独文件
                MiniCssExtractPlugin.loader,
                'css-loader', //将css文件整合到js中
                //css兼容性处理的loader配置
                {
                    //打包好的css兼容性处理 ,需要下载 postcss(postcss-loader包和postcss-preset-env插件)
                    loader: 'postcss-loader',
                    options: {
                        ident: 'postcss',
                        plugins: () => [
                            //postcss-preset-env插件帮助postcss找到package.json中browserlist里面的配置, 
                            //通过配置加载指定的兼容性样式
                            require('postcss-preset-env')()
                            // "browserslist": {
                            //      开发环境
                            //     "development": [
                            //         "last 1 chrome version",
                            //         "last 1 firefox version",
                            //         "last 1 safari version"
                            //     ],

                            //      默认是生产环境和 mode配置无关,如需兼容开发环境需要设置node环境变量:process.env.NODE_ENV ='development'
                            //     "production": [
                            //         ">0.2%", //大于98%的浏览器
                            //         "not dead", 
                            //         "not op_mini all" //除mini的浏览器
                            //     ]
                            // }
                        ]
                    }
                }
            ]
        }]
    },
    //插件
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html'
        }),

        //js中单独提取css的插件调用
        new MiniCssExtractPlugin({
            //对单独提取出来的css文件重命名
            filename: 'css/built.css', //输出重命名
        }),
        //css压缩插件调用
        new OptimizeCssAssetsWebpackPlugin()

    ],
    //开发模式
    mode: 'development'
}

八.webapck 生产环境JS代码压缩

//webpack生产环境中自带了jS压缩插件 UglifysPlugin 所以只要把mode调成生产环境(production)就可以自动压缩js代码

// resolve用来拼接绝对路径的方法
const { resolve } = require('path');

//引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {

    //入口
    entry: './src/index.js',
    //输出
    output: {
        // 输出文件名
        filename: 'built.js',
        // 输出路径
        // __dirname nodejs的变量,代表当前文件的目录绝对路径
        path: resolve(__dirname, 'build')
    },

    //lorder的配置

    module: {
        rules: [

        ]


    },

    // plugins的配置
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html'
        })

    ],

    // mode: 'development' // 开发模式
    mode: 'production'


}

九webapck 生产环境html代码压缩

//webpack压缩html代码只需要加
// minify: {
//     //移除空格
//     collapseWhitespace: true,
//     //移除注释
//     removeComments: true

// }


// resolve用来拼接绝对路径的方法
const { resolve } = require('path');

//引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {

    //入口
    entry: './src/index.js',
    //输出
    output: {
        // 输出文件名
        filename: 'built.js',
        // 输出路径
        // __dirname nodejs的变量,代表当前文件的目录绝对路径
        path: resolve(__dirname, 'build')
    },

    //lorder的配置

    module: {
        rules: [

        ]


    },

    // plugins的配置
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html',
            //压缩html代码
            minify: {
                //移除空格
                collapseWhitespace: true,
                //移除注释
                removeComments: true

            }
        })

    ],

    // mode: 'development' // 开发模式
    mode: 'production'
}

十.webpack性能优化tree.shaking去除无用的代码

/*
tree shaking:去除无用代码
前提:1.必须使用ES6模块化,2.开启prodution环境

测试:首先在index.js中写一段es6的语法代码,然后在index.js引入indexp.js 中暴露出来的mul,不引入count,所以count函数就为废代码,开启打包出的代码里面就没有count函数的代码,


*/

const { resolve } = require('path') //ES6解构赋值 绝对路径
const HtmlWebpackPlugin = require('html-webpack-plugin'); //引入HtmlWebpackPlugin插件 处理html文件
module.exports = {
    //入口文件设置
    entry: './src/js/index.js',
    //输出路径设置
    output: {
        filename: 'built.js', // 输出文件名 //输出文件夹下面。加js
        path: resolve(__dirname, 'build') //__dirname当前模块所在文件夹的完整路径
    },
    //lorder配置
    module: {
        rules: [


        ]

    },

    // 处理html文件
    plugins: [
        // plugins的配置
        // html-webpack-plugin
        // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
        // 需求:需要有结构的HTML文件
        new HtmlWebpackPlugin({
            // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
            template: './src/index.html'
        })

    ],
    // 模式
    mode: 'production', // 开发模式

}

十一.webpack性能优化代码分隔方法(一)自己写的多个js文件用多入口打包成独立的文件

//正常情况下,开发环境的多个js代码文件打包完会成为一个built.js 文件,现在想打包完js文件代码,分隔成开发时单独的JS那样的文件

/*
 方法如下:修改入口文件为多入口文件
       entry: {
        //多入口:有一个入口,最终输出就有一个bundle
        index: './src/js/index.js',
        indexp: './src/js/indexp.js'
    },

   设置输出文件名: filename: '[name].js',
     就这两步就可以了

     build文件夹就打包出来单独的js文件
*/


const { resolve } = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin'); //引入HtmlWebpackPlugin插件 处理html文件
module.exports = {
    //入口文件设置
    //  entry: './src/js/index.js',
    entry: {
        //多入口:有一个入口,最终输出就有一个bundle
        index: './src/js/index.js',
        indexp: './src/js/indexp.js'
    },

    //输出路径设置
    output: {
        filename: '[name].js', //设置多入口文件名[name]
        path: resolve(__dirname, 'build')
    },
    //lorder配置
    module: {
        rules: [


        ]

    },

    // 处理html文件
    plugins: [

        new HtmlWebpackPlugin({
            // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
            template: './src/index.html'
        })

    ],
    // 模式
    mode: 'development', // 开发模式

}

十二.webpack性能优化代码分隔方法(二),单入口打包第三方js插件为单独文件

//正常情况下,开发环境的多个js代码文件打包完会成为一个built.js 文件,现在想打包完js文件代码,分隔成开发时那样单独的JS那样的文件

/*
 方法二如下:配置下面代码 :可以将node_modules中js第三方代码库,单独打包(我自己测试用的jqury做的示范)最终输出
optimization: {
        splitChunks: {
            chunks: 'all'
        }
    },
输出的文件1.built.js 就是jq文件,built.js就是自己写的index.js文件


2.如果我自己写的多个js文件中同时引用了第三方js文件比如(jqury)那么打包还是会只打包一个第三方文件
比如:我的index.js和indexP.js 都引入了jq ,那么打包只会打包一个jq 这个要改为多入口才能测试



总结:这个方法用单入口的话 只能单独把第三方js插件打包成独立的js文件, 


*/


const { resolve } = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin'); //引入HtmlWebpackPlugin插件 处理html文件
module.exports = {
    //入口文件设置
    //  entry: './src/js/index.js',

    entry: {
        //多入口:有一个入口,最终输出就有一个bundle
        index: './src/js/index.js',
        indexp: './src/js/indexp.js'
    },
    //输出路径设置
    output: {
        //   filename: 'built.js', / / 单入口文件名设置

        filename: '[name].js', // 多入口文件名设置

        path: resolve(__dirname, 'build') //__dirname当前模块所在文件夹的完整路径
    },
    //lorder配置
    module: {
        rules: [


        ]

    },

    // 处理html文件
    plugins: [
        // plugins的配置
        // html-webpack-plugin
        // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
        // 需求:需要有结构的HTML文件
        new HtmlWebpackPlugin({
            // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
            template: './src/index.html'
        })

    ],

    //   1. 可以将node_modules中代码单独打包一个chunk最终输出
    //  2. 自动分析多入口chunk中, 有没有公共的文件。 如果有会打包成单独一个chunk *

    optimization: {
        splitChunks: {
            chunks: 'all'
        }
    },
    mode: 'production', // 开发模式

}

十三.webpack性能优化代码分隔方法(三)自己写的多个js文件用单入口打包成独立的文件

//正常情况下,开发环境的多个js代码文件打包完会成为一个built.js 文件,现在想打包完js文件代码,分隔成开发时那样单独的JS那样的文件

/*
 第三种打包方式:20.自己写的多个js文件用单入口打包成独立的文件

 在入口文件index.js配置如下代码

//   import ( /* webpackChunkName: 'indexP' */
//'./indexP')
// .then(({ mul, count }) => {
//         // 文件加载成功~
//         // eslint-disable-next-line
//         console.log(mul(2, 5));
//     })
//     .catch(() => {
//         // eslint-disable-next-line
//         console.log('文件加载失败~');
//     });

// // eslint-disable-next-line
// console.log(sum(1, 2, 3, 4));

const { resolve } = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin'); //引入HtmlWebpackPlugin插件 处理html文件
module.exports = {
    //入口文件设置
    entry: './src/js/index.js',

    //输出路径设置
    output: {
        filename: 'built.js', // 单入口文件名设置

        path: resolve(__dirname, 'build') //__dirname当前模块所在文件夹的完整路径
    },
    //lorder配置
    module: {
        rules: [


        ]

    },

    // 处理html文件
    plugins: [
        // plugins的配置
        // html-webpack-plugin
        // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
        // 需求:需要有结构的HTML文件
        new HtmlWebpackPlugin({
            // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
            template: './src/index.html'
        })

    ],


    mode: 'production', // 开发模式

}

十四.webpack性能优化懒加载文章来源地址https://www.toymoban.com/news/detail-521257.html

//正常情况下,开发环境的多个js代码文件打包完会成为一个built.js 文件,现在想打包完js文件代码,分隔成开发时那样单独的JS那样的文件

/*
 第三种打包方式:20.自己写的多个js文件用单入口打包成独立的文件

 在入口文件index.js配置如下代码

//   import ( /* webpackChunkName: 'indexP' */
//'./indexP')
// .then(({ mul, count }) => {
//         // 文件加载成功~
//         // eslint-disable-next-line
//         console.log(mul(2, 5));
//     })
//     .catch(() => {
//         // eslint-disable-next-line
//         console.log('文件加载失败~');
//     });

// // eslint-disable-next-line
// console.log(sum(1, 2, 3, 4));

const { resolve } = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin'); //引入HtmlWebpackPlugin插件 处理html文件
module.exports = {
    //入口文件设置
    entry: './src/js/index.js',

    //输出路径设置
    output: {
        filename: 'built.js', // 单入口文件名设置

        path: resolve(__dirname, 'build') //__dirname当前模块所在文件夹的完整路径
    },
    //lorder配置
    module: {
        rules: [


        ]

    },

    // 处理html文件
    plugins: [
        // plugins的配置
        // html-webpack-plugin
        // 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
        // 需求:需要有结构的HTML文件
        new HtmlWebpackPlugin({
            // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
            template: './src/index.html'
        })

    ],


    mode: 'production', // 开发模式

}

到了这里,关于用webpack做一些前端打包时的性能优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端工程化面试题】使用 webpack 来优化前端性能/ webpack的功能

    这个题目实际上就是来回答 webpack 是干啥的,你对webpack的理解,都是一个问题。 (1)对 webpack 的理解 webpack 为啥提出 + webpack 是啥 + webpack 的主要功能 前端开发通常是基于模块化的,为了提高开发效率,webpack 是一个基于模块的构建工具,是一个用于 js 应用程序的静态模块

    2024年02月20日
    浏览(50)
  • webpack基础知识八:说说如何借助webpack来优化前端性能?

    一、背景 随着前端的项目逐渐扩大,必然会带来的一个问题就是性能 尤其在大型复杂的项目中,前端业务可能因为一个小小的数据依赖,导致整个页面卡顿甚至奔溃 一般项目在完成后,会通过webpack进行打包,利用webpack对前端项目性能优化是一个十分重要的环节 二、如何优

    2024年02月14日
    浏览(38)
  • 前端知识点、技巧、webpack、性能优化(持续更新~)

    可以把  图片转换成  base64  放在src里面   减少服务器请求  但是图片会稍微大一点点 以上的方法不需要一个一个自己转化 可以在webpack  进行 性能优化   (官网有详细描述)

    2024年03月10日
    浏览(44)
  • Webpack打包图片-js-vue

    为了演示我们项目中可以 加载图片 ,我们需要在项目中使用图片,比较常见的使用图片的方式是两种: img 元素,设置 src 属性; 其他元素(比如div),设置 background-image 的css属性; 我们当前使用的webpack版本是webpack5: 在webpack5之前,加载这些资源我们需要使用一些 loader

    2024年02月06日
    浏览(38)
  • node.js+NPM包管理器+Webpack打包工具+前端项目搭建

    javascript运行环境(无需依赖html文件) BFF,服务于前端的后端 官网下载安装,node -v查看是否安装成功 ①、创建一个01.js文件 ②、通过CMD命令执行(或者通过工具的集成终端) node 01.js 如果出现权限原因,可以通过管理员方式打开工具 ③、通过浏览器访问http://127.0.0.1:8888 如

    2024年02月07日
    浏览(71)
  • 前端Vue项目webpack打包部署后源码泄露解决

    前端项目使用nuxt框架(基于Vue),采用Webpack打包,部署到服务器后,进行漏洞检测。 经Webpack打包部署到服务器后,访问并打开开发者模式,在Source下出现[name]路径,内部包含(webpack)buildin文件夹。(做漏洞分析时,会认为该内容涉及源码泄露) 1.首先考虑源码泄露的问题 打

    2024年02月03日
    浏览(85)
  • webpack/vue-cli构建速度和打包体积优化

    webpack-bundle-analyzer 可以生成代码分析报告,可以直观地分析打包出的文件有哪些,及它们的大小、占比情况、各文件 Gzipped 后的大小、模块包含关系、依赖项等 npm i -D webpackbar webpack-bundle-analyzer javascript 复制代码 const { BundleAnalyzerPlugin } = require(\\\'webpack-bundle-analyzer\\\'); ​ module.e

    2024年01月19日
    浏览(55)
  • 前端项目中CDN的一些问题【性能优化篇】

    CDN(Content Delivery NetWork, 内容分发网络 ),是指 利用最靠近每位用户的服务区 ,更快的将资源发送给用户。 提高用户的访问速度 减轻服务器压力 提高网站的稳定性和安全性 CDN一般用来托管Web资源(文本、图片和视频等),可供下载的资源,应用程序。使用CDN来加速这些

    2024年02月03日
    浏览(43)
  • 性能优化之--- 项目打包优化(vue)

    项目体积小也是优化性能的一个方向,这里以 Vue 工程为例; 当刚运行项目的时候,发现刚进入页面,就将所有的js文件和css文件加载了进来,这一进程十分的消耗时间。 如果打开哪个页面就对应的加载响应页面的js文件和css文件,那么页面加载速度会大大提升。 vue官方文档

    2024年02月09日
    浏览(48)
  • 十五、Webpack打包图片-js-Vue、Label命令、resolve模块解析

    为了演示我们项目中可以加载图片,我们需要在项目中使用图片,比较常见的使用图片的方式是两种: img元素,设置src属性; 其他元素(比如div),设置background-image的css属性; 这个时候我们打包会报错: 我们当前使用的webpack版本是webpack5: 在webpack5之前,加载这些资源我

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包