简单说明:

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:
  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:
  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:
  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:
  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

本文结束。

webpack打包多html开发案例的更多相关文章

  1. webpack打包多html开发案例新

    闲来无事在原来简单打包案例的基础上,参考vue-cli的打包代码,改为多文件打包. 区别于上篇文章<webpack打包多html开发案例>,此次打包根据开发的不同环节进行打包,也就是有开发 ...

  2. 使用webpack打包js文件(隔行变色案例)

    使用webpack打包js文件(隔行变色案例) 1.webpack安装的两种方式 运行npm i webpack -g全局安装webpack,这样就能在全局使用webpack的命令 在项目根目录中运行 ...

  3. 《React+Redux前端开发实战》笔记2:基于Webpack构建的Hello World案例(上)

    这次搭建分为两部分:一部分是前期必要配置,一部分是开发React代码. [基于Webpack的React Hello World项目] 1.前期必要配置 (1)首先要确保读者的开发设备上已经安装过No ...

  4. 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML(转)

    1.什么是工程化开发 软件工程的工程化开发概念由来已久,但对于前端开发来说,我们没有像VS或者eclipse这样量身打造的IDE,因为在大多数人眼中,前端代码无需编译,因此只要一个浏览器来运行调试就行 ...

  5. webpack打包优化之外部扩展externals的实际应用

    目录 前言 externals定义 用法 string array object function regex 实际案例 打包时间 打包之后包的大小 浏览器加载 需要注意 参考 前言 使用vue-cl ...

  6. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  7. [webpack] 配置react+es6开发环境

    写在前面 每次开新项目都要重新安装需要的包,简单记录一下. 以下仅包含最简单的功能: 编译react 编译es6 打包src中入口文件index.js至dist webpack配置react+es6开 ...

  8. 使用webpack打包ThinkPHP的资源文件

    使用webpack打包ThinkPHP的资源文件 利用自己的空余时间一直在维护http://www.wx2share.com这个小网站,全是一个人在弄,由于只租得起虚拟空间,所以后台采用了简单方便的T ...

  9. Webpack打包进阶

    说在前面 由于使用了React直出,页面各项性能指标使人悦目.本篇将深入探讨目前PC部落所采用webpack打包优化策略,以及探讨PC部落并未使用的 webpack Code Splitting 代码 ...

随机推荐

  1. 面试和工作中的map

    map是C++ STL中的关联容器,存储的是键值对(key-value),可以通过key快速索引到value.map容器中的数据是自动排序的,其排序方式是严格的弱排序(stick weak order ...

  2. EAC 抓取CD为AAC文件

    下载EAC v1.3 下载FAAC 安装完EAC以后进入主界面,选菜单EAC->compression option,如图: 选User Defined Encoder,选择之前解压好的faac ...

  3. FIR滤波器实例

    Fs = 1000; % 采样频率 N = 1024; % 采样点数 ,即实际中一次FFT变换所使用的点数n = 0:N-1; % 采样序列,为plot绘图用的序列,其对应点表示的真实频率为 f = ...

  4. NoSQL入门第一天——NoSQL入门与基本概述

    一.课程大纲 二.入门概述 1.为什么用NoSQL 单机MySQL的年代: 一个网站的访问量一般都不大,用单个数据库完全可以轻松应付. 我们来看看数据存储的瓶颈是什么? 1.数据量的总大小 一个机器放 ...

  5. 20155319《Java程序设计》实验三(敏捷开发与XP实践)实验报告

    20155319<Java程序设计>实验三(敏捷开发与XP实践)实验报告 一.实验内容及步骤 (一)使用Code菜单 在IDEA中使用工具(Code->Reformate Code) ...

  6. underscore.js 分析 第四天

    查看underscore包含多少属性和方法 通过阅读JavaScript 获取对象的键的数组 var a = _; var arr = Object.keys(a); console.log(arr) ...

  7. CentOS-6.4 minimal - 安装VMware Tools(linux)

    本文参考自:http://www.cnblogs.com/xyq/p/4068018.html 1.挂载光驱 2./mnt下面默认显示以下文件 3.卸载/mnt 4.点击安装VMware Tools ...

  8. Spring学习(八)-----Spring注入值到集合类型的例子

    下面例子向您展示Spring如何注入值到集合类型(List, Set, Map, and Properties). 支持4个主要的集合类型: List – <list/> Set – &l ...

  9. XAF-如何在详细视图界面显示按钮(含示例项目下载)

    默认情况下,指定了按钮的Category后,将在对应的按钮容器显示按钮.有时候,我们需要将按钮显示在详细视图中. 本示例源码 创建一个控制器,并填加按钮.设置好了所有ID.Caption后,给Cate ...

  10. 学习HTML 第四节.插入图像

    学习HTML 第四节.插入图像 全是文字的网页太枯燥了吧,我们来搞个图片上去! <!DOCTYPE html><html><head><meta charse ...