当前位置: 首页 > 工具软件 > production > 使用案例 >

webpack 发布 production

龚奇逸
2023-12-01



// 引入根路径  path 
let path = require('path');

// 引入 根目录
const root = process.cwd();

// 引入  vue-loadeer 
let { VueLoaderPlugin  } = require('vue-loader');

// 引入 处理 Html 的插件
let HtmlWebpackPlugin = require('html-webpack-plugin');

// 引入 css 的插件
let  MiniCssExtractPlugin= require('mini-css-extract-plugin');

// 引入 压缩 css  的插件
let  OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')

// 定义配置
module.exports={
    // 模式
    // 发布模式
    mode:'production',

    // 解决问题
    resolve:{
        // 定义别名
        alias:{
            vue$:'vue/dist/vue.js',

            // 配置地址
            '@':path.join(root,'./src'),
            '@v':path.join(root,'./src/views'),
            '@c':path.join(root,'./src/compoments')
        },

        // 拓展名
        extensions:['.js','.vue'],
    },

    // 入口文件
    entry:'./src/main.js',

    // 发布
    output:{
        // '文件名'
        // 第一种添加  hash 指纹的方式
        // filename:'./static/[name].[hash:8].js',
        // 第二种方式  在插件中定义
        filename:'./static/[name].js',
        // 发布位置
        path:path.join(root,'./dzx/'),

        // 修改静态文件的相对位置
        publicPath:'../'
    },

    // 模块
    module:{
        // 定义加载机
        rules:[
            // vue 加载机
            {
                test:/\.vue$/,
                loader:'vue-loader',
                // 在以前的版本中,打包 css 还需要传递数据
                // use:[
                //     {
                //         loader:'vue-loader',
                //         options:{
                //             extractCSS:true
                //         }
                //     }
                // ]
            },
            // css 加载机
            {
                test:/\.css$/,
                use:[
                    'style-loader',
                    // 在样式文件的 style-loader 后添加 loader
                    MiniCssExtractPlugin.loader,
                    'css-loader'
                ]
            },
            // less
            {
                test:/\.less$/,
                use:[
                    'style-loader',
                    // 在样式文件的 style-loader 后添加 loader
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    'less-loader'
                ]
            },
            // scss
            {
                test:/\.scss$/,
                use:[
                    'style-loader',
                    // 在样式文件的 style-loader 后添加 loader
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    'sass-loader'
                ]
            }
        ]
    },
    // 定义插件
    plugins:[
        // 使用 vue-loader
        new VueLoaderPlugin(),

        // 处理 Html 的模板
        new HtmlWebpackPlugin({
            // 模板的位置
            template:'./public/index.html',
            // 发布的位置
            filename:'./views/index.html',
            // 添加指纹
            hash:true
        }),

        // 定义 css 文件的发布位置
        new MiniCssExtractPlugin({
            filename:'./static/style.css'
        }),

        // 压缩 css  代码
        new OptimizeCssAssetsWebpackPlugin()
    ],

    // 优化 拆分文件
    optimization:{
        // 拆分文件
        splitChunks:{
            cacheGroups:{
                lib:{
                    name:'lib',
                    chunks:'initial',
                    test:/node_modules/
                }
            }
        }
    }
}
 类似资料: