zoukankan      html  css  js  c++  java
  • webpack多页面配置

    webpack.common.js

    
    const webpack = require("webpack");
    const path = require('path');
    const glob = require('glob');
    const HtmlWebpackPlugin = require('html-webpack-plugin'); // html引擎
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin');
    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    let outputfile = ''
    function buildEntriesAndHTML() {
        // 用来构建entry
        const result = glob.sync('views/**/*.js');
        const config = {
            hash: false,
            inject: true
        };
        const entries = {};
        const htmls = [];
        result.forEach(item => {
            const one = path.parse(item);
            outputfile = one.dir.split('/').slice(-1)[0];
            entries[outputfile] = './' + item;
            const filename = {
                'development':'./' + outputfile +  '/index.html',
                'production':'./' + outputfile + '/'+outputfile+'.html',
            }
            htmls.push(
                new HtmlWebpackPlugin({
                    ...config,
                    template: './' + one.dir + '/index.html',
                    filename: filename[process.env.NODE_ENV], // 输出html文件的路径
                    title:outputfile+'模版',
                    chunks: [outputfile],
                    // inlineSource: '.(js|css)'  //配合HtmlWebpackInlineSourcePlugin 插件,如果不需要将css,js内联则不用写
                })
            );
        });
        // 如果不需要将css,js内联则不用写
        /*if (htmls.length > 0) {
            htmls.push(new HtmlWebpackInlineSourcePlugin());
        }*/
        return {
            entries,
            htmls
        };
    }
    const final = buildEntriesAndHTML();
    module.exports =  {
        entry: final.entries,
        module: {
            rules: [
                {
                    test: /.css$/,
                    use: [
                        MiniCssExtractPlugin.loader,
                        'css-loader',
                        {loader: 'postcss-loader', options: {plugins: [require("autoprefixer")("last 100 versions")]}}
                    ]
                },
                {
                    test: /.less$/,
                    use: [
                        MiniCssExtractPlugin.loader,
                        'css-loader?importLoaders=1',
                        {loader: 'postcss-loader', options: {plugins: [require("autoprefixer")("last 100 versions")]}},
                        'less-loader'
                    ]
                },
                {
                    test: /.(png|jpe?g|gif|svg)(?.*)?$/,
                    /*use:[
                     {
                     loader: 'url-loader',
                     options: {
                     limit: 1024 * 10,
                     name: 'image/[name].[ext]',
                     fallback: 'file-loader'
                     }
                     },
                     {
                     loader: 'image-webpack-loader',// 压缩图片
                     options: {
                     bypassOnDebug: true,
                     }
                     }
                     ]*/
                    use: [
                        {
                            loader: 'file-loader',
                            options: {
                                // name: outputfile+'/static/assets/[name].[ext]',
                                name: './static/assets/[name].[ext]',
                            }
                        },
                        {
                            loader: 'image-webpack-loader',// 压缩图片
                            options: {
                                bypassOnDebug: true,
                            }
                        }
                    ]
                },
                {
                    test: /.(mp4|webm|ogg|mp3|wav|flac|aac|swf|mov)(?.*)?$/,
                    use: [
                        {
                            loader: 'file-loader',
                            options: {
                                name: 'media/[name].[hash:7].[ext]',
                            }
                        },
                    ]
                },
                {
                    test: /.js$/,
                    exclude: [
                        /node_modules/,
                        path.resolve(__dirname, "assets/javascripts/swiper.min.js"),
                    ],
                    use: {
                        loader: "babel-loader"
                    }
                },
                {
                    test: /.html$/,
                    use: [
                        {
                            loader: "html-loader",
                            options: {
                                minimize: true,// 加载器切换到优化模式,启用压缩。
                                caseSensitive:true // 以区分大小写的方式处理属性(对于自定义HTML标记很有用),即禁止html标签全部转为小写
                            }
                        }
                    ]
                }
            ]
        },
        plugins: [
            new OptimizeCSSAssetsPlugin({
                assetNameRegExp: /.css.*(?!.*map)/g,  //注意不要写成 /.css$/g
                cssProcessor: require('cssnano'),
                cssProcessorOptions: {
                    discardComments: {removeAll: true},
                    // 避免 cssnano 重新计算 z-index
                    safe: true,
                    // cssnano 集成了autoprefixer的功能
                    // 会使用到autoprefixer进行无关前缀的清理
                    // 关闭autoprefixer功能
                    // 使用postcss的autoprefixer功能
                    autoprefixer: false
                },
                canPrint: true
            }),
            new MiniCssExtractPlugin({
                filename: '[name]/[name].css',
                chunkFilename: '[name].css'
            }),
            ...final.htmls
        ],
        resolve: {
            extensions: ['.js', '.json', '.jsx', '.css']
        },
    }

    webpacl.prod.js

    const merge = require('webpack-merge');
    const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
    const CleanWebpackPlugin = require('clean-webpack-plugin');
    const common = require('./webpack.common.js');
    const path = require('path')
    const BUILD_PATH = path.resolve(__dirname,'dist')  //  打包模板生成路径
    
    module.exports = merge(common, {
        output: { // 出口文件
            path: BUILD_PATH,
            publicPath: '/',
            filename: '[name]/[name].js' //输出文件
        },
        devtool: 'source-map',
        plugins: [
            new CleanWebpackPlugin(['dist']),
            new UglifyJSPlugin({
                sourceMap: true,
                uglifyOptions: {
                    output: {
                        comments: true,
                    },
                }
            })
        ]
    });
  • 相关阅读:
    Mac 国内安装homebrew办法
    字符串方法及注释
    文件的操作
    集合
    Mac下CVS文件编码转换
    字符串格式化
    postman常用断言的一些内置方法
    get与post区别
    pygame知识点(持续更新)
    记录第一次使用
  • 原文地址:https://www.cnblogs.com/beileixinqing/p/11213132.html
Copyright © 2011-2022 走看看