webpack打包多页面

2021-04-01 13:27

阅读:579

标签:save   一个   content   后缀名   监听端口   文件名   jpeg   相关   options   

1.创建json,npm int

2.引入的依赖用cnpm install xx --save-dev或者npm install xx --save-dev

3.用到的loader和plugin有

"clean-webpack-plugin": "^3.0.0",//清理上次打包的文件
        "css-loader": "^2.1.1",//对js里引入css,导出到js里
        "extract-text-webpack-plugin": "^4.0.0-beta.0",//分离css从js里
        "file-loader": "^3.0.1",//生成的图片的文件名就是文件内容的 MD5 哈希值并会保留所引用资源的原始扩展名。
        "html-webpack-plugin": "^3.2.0",//生产html模板
        "html-withimg-loader": "^0.1.16",//打包html里的,没被依赖的图片
        "optimize-css-assets-webpack-plugin": "^5.0.0",//压缩css
        "style-loader": "^0.23.1",//对js里引入css,导出到js里
        "uglifyjs-webpack-plugin": "^2.2.0",//压缩js
        "url-loader": "^1.1.2",//压缩图片文件指定大小的图片道js里
        "webpack": "^4.30.0",//webpack
        "webpack-dev-server": "^3.10.3"//本地服务器
 
4.入口(多入口)(待优化)
entry: {
        index1: ‘./src/js/index1.js‘,
        index2: ‘./src/js/index2.js‘,
    },
 优化:引入配置文件
entry: configReq.entry,
 
5.出口(指定在dist里,hash避免缓存)
output: {
        filename: ‘js/[name]-[hash].js‘,
        path: __dirname + ‘/dist‘,
    },
 
6.本地服务器
 devServer: {
        contentBase: "./dist", //本地服务器所加载的页面所在的目录
        port: "8080", //设置默认监听端口,如果省略,默认为"8080"
        inline: true, //实时刷新
        historyApiFallback: true //不跳转
    },
 
7.loader
 module: {
        rules: [
            //对js里引入css,导出到js里
            {
                test: /\.(css)$/,
                use: extractTextPlugin.extract({
                    fallback: "style-loader",
                    use: [{
                        loader: "css-loader",
                    }, ]
                })
            },
            //压缩图片
            {
                test: /\.(png|jpg|gif|jpeg)/, //是匹配图片文件后缀名
                use: [{
                    loader: ‘url-loader‘, //指定使用的loader和loader的配置参数
                    options: {
                        limit: 5 * 1024, //是把小于5KB的文件打成Base64的格式,写入JS
                        outputPath: ‘./image/‘ //打包后的图片放到img文件夹下
                    }
                }]
            },
            //打包html的图片
            {
                test: /\.(htm|html)$/i,
                use: [‘html-withimg-loader‘]
            }
        ]
    },
 
8.plugins
 plugins: [
        new webpack.BannerPlugin(‘版权所有,翻版必究‘),
        new CleanWebpackPlugin(),//清理上次打包的文件
  //html模板(待优化)
    //    new htmlPlugin({
       //     filename: ‘index.html‘,
      //      minify: { //对html文件进行压缩
       //         removeAttributeQuotes: true, //removeAttrubuteQuotes是去掉属性的双引号。
        //    },
       //     chunks: [‘index1‘], //每个html只引入对应的js和css
       //     inject: true,
        //    template: ‘./src/index1.html‘ //打包html模版的路径和文件名称。
      //  }),
     //   new htmlPlugin({
     //       filename: ‘index2.html‘,
     //       minify: { //对html文件进行压缩
       //         removeAttributeQuotes: true, //removeAttrubuteQuotes是去掉属性的双引号。
       //     },
       //     chunks: [‘index2‘],
       //     inject: true,
    //        template: ‘./src/index2.html‘ //打包html模版的路径和文件名称。
    //    }),
        new extractTextPlugin("css/[name]-[hash].css"), //提取CSS行内样式,转化为link引入

    ],
    optimization: {
        minimizer: [
  //压缩js
            new UglifyJsPlugin({
                cache: true,
                parallel: true,
                sourceMap: true // set to true if you want JS source maps
            }),
//压缩css
            new OptimizeCSSAssetsPlugin({})
        ]
    }
 
//html模板优化的
//生成模版文件
configReq.htmlConfig.forEach((val, i) => {
    var hcoging = {
        template: "./src/" + val.name + ".html", //new 一个这个插件的实例,并传入相关的参数
        filename: val.name + ".html",
        chunks: [val.name],
        inject: true,
        minify: { //压缩HTML文件
            removeComments: true, //移除HTML中的注释
            removeAttributeQuotes: true, //removeAttrubuteQuotes是去掉属性的双引号。
            collapseWhitespace: false //删除空白符与换行符
        }
    }
    config.plugins.push(new htmlPlugin(hcoging));
})
 
//配置文件config.js
const webpack = require(‘webpack‘);
//入口配置 
var entry = {
        index1: ‘./src/js/index1.js‘,
        index2: ‘./src/js/index2.js‘,
    }
    //页面配置
var htmlConfig = [{
    name: "index1",
    src: __dirname + "/app/page/index.js",
}, {
    name: "index2",
    src: __dirname + "/app/page/list.js",
}];
module.exports = {
    entry: entry,
    htmlConfig: htmlConfig
}
//引入配置
var configReq = require(‘./config.js‘); //读取配置
module.exports = config;//config为webpack配置文件
 
//还剩公共的方法的处理

webpack打包多页面

标签:save   一个   content   后缀名   监听端口   文件名   jpeg   相关   options   

原文地址:https://www.cnblogs.com/ssszjh/p/12567038.html


评论


亲,登录后才可以留言!