zoukankan      html  css  js  c++  java
  • webpack打包多html开发案例

    简单说明:

    1,案例没有使用devserver,所以不能实时查看

    2,案例是将src下面的html、css、js分别进行处理

    3,多html的规律是需要有多个entry,每个html一个entry,当然可以采用Esm模块化规则,同时需要新建多个HtmlWebpackPlugin

    根据是否分离css文件,webpack.config.js分为两种

    第一种是没有分离的,代码关键在于是否使用 extract-text-webpack-plugin这个插件。

     1 var path = require("path"); //需要使用绝对路径
     2 var HtmlWebpackPlugin = require("html-webpack-plugin");
     3 const webpack=require("webpack");
     4 const CleanWebpackPlugin = require('clean-webpack-plugin')
     5 // var ExtractTextPlugin = require("extract-text-webpack-plugin")
     6 
     7 module.exports = {
     8     entry: {
     9 
    10         vendor:['jquery','./src/js/common.js'],
    11         index: "./src/js/index.js",
    12         cart: "./src/js/cart.js"
    13     },
    14     output: {
    15         path: path.join(__dirname, "./dist"),
    16         filename: "js/[name].js",
    17         publicPath: ""
    18     },
    19     module: {
    20         rules: [
    21             {
    22               test: /.js$/,
    23               loader: 'babel-loader',
    24               include: path.join(__dirname, 'src'),
    25               exclude: /node_modules/,
    26             }
    27             ,{
    28                 test: /.css$/,
    29                 include: path.join(__dirname, 'src'),
    30                 exclude: /node_modules/,
    31                 loader: "style-loader!css-loader" //这种方式可以打包将css动态注入到html内部
    32             }
    33         ]
    34     },
    35     plugins: [
    36         new CleanWebpackPlugin(["./dist"], {
    37             root: path.join(__dirname, ""),
    38             verbose: true,
    39             dry: false
    40         }),
    41         //负责打包html文件  将js注入到html中,minify压缩html
    42         new HtmlWebpackPlugin({
    43             filename: "index.html",
    44             template: "./src/index.html",
    45             chunks: ["index","vendor"],
    46             minify:{
    47               removeComment:true,
    48               collapseWhitespace:true
    49             }
    50         }),
    51         new HtmlWebpackPlugin({
    52             filename: "cart.html",
    53             template: "./src/cart.html",
    54             chunks: ["cart","vendor"]
    55         }),
    56          //压缩js代码
    57         new webpack.optimize.UglifyJsPlugin({
    58            compress:{
    59                warnings:false
    60            }
    61         }),
    62         //公共插件打包,抽取公共部分
    63         new webpack.optimize.CommonsChunkPlugin({
    64             name:'vendor',
    65             chunks:['index','cart','vendor'],
    66             mikChunks:2
    67         }),
    68         new webpack.ProvidePlugin({
    69            $:"jquery",
    70            jQuery:"jquery",
    71            'window.Jquery':"jquery"
    72         }),
    73         //可以将css代码分离出来,如果不适用,分离成单独的文件,默认是自动注入到内部的
    74         //  new ExtractTextPlugin({
    75         //     filename: '[name].css',
    76         // })
    77     ],
    78     //devtool:"#source-map"  用于调试
    79 }

    使用这个插件也就是分离css的

     1 var path = require("path"); //需要使用绝对路径
     2 var HtmlWebpackPlugin = require("html-webpack-plugin");
     3 const webpack=require("webpack");
     4 const CleanWebpackPlugin = require('clean-webpack-plugin')
     5 var ExtractTextPlugin = require("extract-text-webpack-plugin")
     6 
     7 module.exports = {
     8     entry: {
     9 
    10         vendor:['jquery','./src/js/common.js'],
    11         index: "./src/js/index.js",
    12         cart: "./src/js/cart.js"
    13     },
    14     output: {
    15         path: path.join(__dirname, "./dist"),
    16         filename: "js/[name].js",
    17         publicPath: ""
    18     },
    19     module: {
    20         rules: [
    21             {
    22               test: /.js$/,
    23               loader: 'babel-loader',
    24               include: path.join(__dirname, 'src'),
    25               exclude: /node_modules/,
    26             }
    27             ,{
    28                 test: /.css$/,
    29                 include: path.join(__dirname, 'src'),
    30                 exclude: /node_modules/,
    31                 loader: ExtractTextPlugin.extract({
    32                     fallback:"style-loader",
    33                     use:"css-loader"
    34                 }),
    35             }
    36         ]
    37     },
    38     plugins: [
    39         new CleanWebpackPlugin(["./dist"], {
    40             root: path.join(__dirname, ""),
    41             verbose: true,
    42             dry: false
    43         }),
    44         //负责打包html文件  将js注入到html中,minify压缩html
    45         new HtmlWebpackPlugin({
    46             filename: "index.html",
    47             template: "./src/index.html",
    48             chunks: ["index","vendor"],
    49             minify:{
    50               removeComment:true,
    51               collapseWhitespace:true
    52             }
    53         }),
    54         new HtmlWebpackPlugin({
    55             filename: "cart.html",
    56             template: "./src/cart.html",
    57             chunks: ["cart","vendor"]
    58         }),
    59          //压缩js代码
    60         new webpack.optimize.UglifyJsPlugin({
    61            compress:{
    62                warnings:false
    63            }
    64         }),
    65         //公共插件打包,抽取公共部分
    66         new webpack.optimize.CommonsChunkPlugin({
    67             name:'vendor',
    68             chunks:['index','cart','vendor'],
    69             mikChunks:2
    70         }),
    71         new webpack.ProvidePlugin({
    72            $:"jquery",
    73            jQuery:"jquery",
    74            'window.Jquery':"jquery"
    75         }),
    76         //可以将css代码分离出来,如果不适用,分离成单独的文件,默认是自动注入到内部的
    77          new ExtractTextPlugin({
    78             filename: 'css/[name].css',
    79         })
    80     ],
    81     //devtool:"#source-map"  用于调试
    82 }

    以上,后面研究加上devserver有关配置项目。

    src下面的目录结构

    dist下目录结构在分离情况下一致。

    package.json

     1 {
     2   "name": "webpack",
     3   "version": "1.0.0",
     4   "description": "",
     5   "main": "webpack.config.js",
     6   "scripts": {
     7     "server": "webpack-dev-server  --open",
     8     "test": "echo "Error: no test specified" && exit 1"
     9   },
    10   "author": "",
    11   "license": "ISC",
    12   "dependencies": {
    13     "webpack": "^3.3.0"
    14   },
    15   "devDependencies": {
    16     "babel-core": "^6.26.3",
    17     "babel-loader": "^7.1.4",
    18     "babel-preset-env": "^1.7.0",
    19     "clean-webpack-plugin": "^0.1.19",
    20     "css-loader": "^0.28.11",
    21     "extract-text-webpack-plugin": "^3.0.2",
    22     "html-webpack-plugin": "^3.2.0",
    23     "style-loader": "^0.21.0",
    24     "webpack-dev-server": "^2.11.0"
    25   }
    26 }

    好吧,加上webpack-dev-server之后原来只是加上devServer的配置项就可以。

     1 var path = require("path"); //需要使用绝对路径
     2 var HtmlWebpackPlugin = require("html-webpack-plugin");
     3 const webpack=require("webpack");
     4 const CleanWebpackPlugin = require('clean-webpack-plugin')
     5 var ExtractTextPlugin = require("extract-text-webpack-plugin")
     6 
     7 module.exports = {
     8     entry: {
     9 
    10         vendor:['jquery','./src/js/common.js'],
    11         index: "./src/js/index.js",
    12         cart: "./src/js/cart.js"
    13     },
    14     output: {
    15         path: path.join(__dirname, "./dist"),
    16         filename: "js/[name]-[hash].js",
    17         publicPath: ""
    18     },
    19     devServer:{
    20       port:9000
    21     },
    22     module: {
    23         rules: [
    24             {
    25               test: /.js$/,
    26               loader: 'babel-loader',
    27               include: path.join(__dirname, 'src'),
    28               exclude: /node_modules/,
    29             }
    30             ,{
    31                 test: /.css$/,
    32                 include: path.join(__dirname, 'src'),
    33                 exclude: /node_modules/,
    34                 loader: ExtractTextPlugin.extract({
    35                     fallback:"style-loader",
    36                     use:"css-loader"
    37                 }),
    38             }
    39         ]
    40     },
    41     plugins: [
    42         //清除掉dist文件
    43         new CleanWebpackPlugin(["./dist"], {
    44             root: path.join(__dirname, ""),
    45             verbose: true,
    46             dry: false
    47         }),
    48         //负责打包html文件  将js、css注入到html中,minify压缩html,多文件的处理需要多个入口
    49         new HtmlWebpackPlugin({
    50             filename: "index.html",
    51             template: "./src/index.html",
    52             chunks: ["index","vendor"],
    53             minify:{
    54               removeComment:true,
    55               collapseWhitespace:true
    56             }
    57         }),
    58         new HtmlWebpackPlugin({
    59             filename: "cart.html",
    60             template: "./src/cart.html",
    61             chunks: ["cart","vendor"]
    62         }),
    63          //压缩js代码
    64         new webpack.optimize.UglifyJsPlugin({
    65            compress:{
    66                warnings:false
    67            }
    68         }),
    69         //公共插件打包,抽取公共部分
    70         new webpack.optimize.CommonsChunkPlugin({
    71             name:'vendor',
    72             chunks:['index','cart','vendor'],
    73             mikChunks:2
    74         }),
    75         new webpack.ProvidePlugin({
    76            $:"jquery",
    77            jQuery:"jquery",
    78            'window.Jquery':"jquery"
    79         }),
    80         //可以将css代码分离出来,如果不适用,分离成单独的文件,默认是自动注入到内部的
    81          new ExtractTextPlugin({
    82             filename: 'css/[name]-[hash].css',
    83         })
    84     ],
    85     //devtool:"#source-map"  用于调试
    86 }

    新文章链接,更改为峰dev和bulid:https://www.cnblogs.com/zhensg123/p/9398595.html

    本文结束。

  • 相关阅读:
    【UML建模】UML类图几种关系的总结
    【架构框架】IoC框架
    【AutoMapper基础】值解析器--Custom value resolvers
    【AutoMapper基础】简单示例--Flattening
    【AutoMapper简介】
    【UML建模】UML类图符号简介
    【.Net基础02】XML序列化问题
    【.net 基础01】ReferenceEquals,Equals,==的区别
    【Visual Studio】利用预编译命令发布不同的版本
    【Windows Phone 8】五角星评价控件
  • 原文地址:https://www.cnblogs.com/zhensg123/p/9298335.html
Copyright © 2011-2022 走看看