关于webpack多页面配置部分记录

2017-11-01  本文已影响119人  black白先森
1.jpg

注意这个页面中的css,js,img资源,用的是webpack.config.js 的publicPath

module.exports = {
    devtool: '#source-map',
    entry: entry_files,
    output: {
        filename: 'static/js/[name][hash].js',
        chunkFilename: './static/js/[id].chunk.js',
        path: path.join(__dirname, 'dist'),
        //publicPath 上线替换真实的http,如果设置为/则需把dist下的文件放在项目的根目录
        //publicPath:'http://localhost:3000/'
        publicPath:'./'
    // 这里的publicPath注意,后来HtmlWebpack插件资源注入页面模板时,是在这个地址下的
    },
目录.jpg
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/,
                loader: 'babel-loader'
            },
            {
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use:[
                        {
                            loader: 'css-loader',
                            options:{
                                minimize: true //css压缩
                            }
                        }
                    ]
                })
            },
            {
                test: /\.scss$/,
                use: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: ['css-loader', 'sass-loader']
                })
            },
            {
                test: /\.html$/,
                loader: "html-loader?attrs=img:src img:data-src"
            },

utils.js 判断生产环境,开发环境

var path = require('path');
const fs = require('fs');
/*设置生产环境与开发环境路径*/
exports.assetsPath = function (_path) {
    var assetsSubDirectory = process.env.NODE_ENV === 'production'
        ? 'static'
        : 'static'
    return path.posix.join(assetsSubDirectory, _path)
}
            {
                test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                    limit:10000,
                    name:utils.assetsPath('img/[name].[hash:7].[ext]')
                }
            },
            {
                test:/\.(woff2?|eot|ttf|otf)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    name: utils.assetsPath('fonts/[name].[ext]')
                }
            }           
        ]

    },
    plugins: require('./base.plugin'),
    //方便开发使用,浏览器输入:http://localhost:3000访问
    devServer:{
        contentBase:'./',
        host:'localhost',
        compress:true,
        port:3000,
        inline:true
    }
}

原来html中没有css,js引入 是统一引入同名资源

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
<div class="container">
    <div class="row">
        <div><p>index</p></div>
        <div class="col-md-12 tcon">
        </div>
    </div>
    <div class="row">
        <div class="col-md-6">
          <img >
        </div>
    </div>
</div>
</body>
</html>

entry.js 中把src/js下面的文件存储

var path = require('path');
var fs = require('fs');
let entry_files = {};

function each_file(dir) {
    try {
        console.log(fs.readdirSync(dir))
        /**
        [ 'index.js',
          'mod.js',
          'pageA.js',
          'pageB.js',
          'pageC.js',
          'testm.js' ]
        */
        fs.readdirSync(dir).forEach(function (file) {
            var file_path = dir + '/' + file;
            var fname = path.basename(file, '.js');
            entry_files[fname]=file_path;
        })
        console.log(entry_files)
        /**
        { index: './src/js/index.js',
          mod: './src/js/mod.js',
          pageA: './src/js/pageA.js',
          pageB: './src/js/pageB.js',
          pageC: './src/js/pageC.js',
          testm: './src/js/testm.js'
        }
        */
    } catch (e) {

    }
}
each_file('./src/js');

module.exports=entry_files;

pagesArray.js

var path = require('path');
var fs = require('fs');
let pagesArray = [];
function each_file(dir) {
    try {
        fs.readdirSync(dir).forEach(function (file) {
            /*
            * {
            *   index:'./src/index.html',
            *   chunkname:'index'
            * }
            * */
            var file_obj={}; 
            var file_path = dir + '/' + file;
            var chunk_name = path.basename(file, '.html');
            file_obj['filename']=file;
            file_obj['template']=file_path;
            file_obj['chuckName']=chunk_name;
            pagesArray.push(file_obj)

            console.log(pagesArray)

            /*
            [ { filename: 'index.html',
                template: './src/pages/index.html',
                chuckName: 'index' },
              { filename: 'pageA.html',
                template: './src/pages/pageA.html',
                chuckName: 'pageA' },
              { filename: 'pageB.html',
                template: './src/pages/pageB.html',
                chuckName: 'pageB' },
              { filename: 'pageC.html',
                template: './src/pages/pageC.html',
                chuckName: 'pageC' } ]*/
        })
    } catch (e) {

    }
}
each_file('./src/pages');
module.exports=pagesArray;
var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
//html页面 pagesArray
var pagesArray =require('./pagesArray');
let base_plugin = [
    new webpack.optimize.CommonsChunkPlugin({
        name: "vendors",
        chunks: ["pageA", "pageB", "pageC"],//提取公用模块
        minChunks: Infinity
    }),
    new ExtractTextPlugin({
        //生成css文件名
        filename: 'static/css/[name].css',
        disable: false,
        allChunks: true
    }),
    //webpack自带的js压缩插件
    new webpack.optimize.UglifyJsPlugin({
        compress: {
            warnings: false
        }
    })
    /* new UglifyJSPlugin()*/
]
/*遍历页面,添加配置*/
pagesArray.forEach((page)=>{
    const htmlPlugin = new HtmlWebpackPlugin({
        template: page.template,
        filename: page.filename,
        chunks: ['vendors', page.chuckName],
        // hash:true,
        minify: {
            removeComments: true,
            collapseWhitespace: false //删除空白符与换行符
        }
    });

    // console.log(htmlPlugin)

    /*HtmlWebpackPlugin {
        options: { template: './src/pages/pageA.html',
             filename: 'pageA.html',
             hash: false,
             inject: true,
             compile: true,
             favicon: false,
             minify: { removeComments: true, collapseWhitespace: false },
             cache: true,
             showErrors: true,
             chunks: [ 'vendors', 'pageA' ],
             excludeChunks: [],
             title: 'Webpack App',
             xhtml: false 
         } 
     }*/

    base_plugin.push(htmlPlugin)
})

module.exports = base_plugin;
上一篇下一篇

猜你喜欢

热点阅读