简单说明:

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

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

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

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

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

 var path = require("path"); //需要使用绝对路径
var HtmlWebpackPlugin = require("html-webpack-plugin");
const webpack=require("webpack");
const CleanWebpackPlugin = require('clean-webpack-plugin')
// var ExtractTextPlugin = require("extract-text-webpack-plugin") module.exports = {
entry: { vendor:['jquery','./src/js/common.js'],
index: "./src/js/index.js",
cart: "./src/js/cart.js"
},
output: {
path: path.join(__dirname, "./dist"),
filename: "js/[name].js",
publicPath: ""
},
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
include: path.join(__dirname, 'src'),
exclude: /node_modules/,
}
,{
test: /\.css$/,
include: path.join(__dirname, 'src'),
exclude: /node_modules/,
loader: "style-loader!css-loader" //这种方式可以打包将css动态注入到html内部
}
]
},
plugins: [
new CleanWebpackPlugin(["./dist"], {
root: path.join(__dirname, ""),
verbose: true,
dry: false
}),
//负责打包html文件 将js注入到html中,minify压缩html
new HtmlWebpackPlugin({
filename: "index.html",
template: "./src/index.html",
chunks: ["index","vendor"],
minify:{
removeComment:true,
collapseWhitespace:true
}
}),
new HtmlWebpackPlugin({
filename: "cart.html",
template: "./src/cart.html",
chunks: ["cart","vendor"]
}),
//压缩js代码
new webpack.optimize.UglifyJsPlugin({
compress:{
warnings:false
}
}),
//公共插件打包,抽取公共部分
new webpack.optimize.CommonsChunkPlugin({
name:'vendor',
chunks:['index','cart','vendor'],
mikChunks:
}),
new webpack.ProvidePlugin({
$:"jquery",
jQuery:"jquery",
'window.Jquery':"jquery"
}),
//可以将css代码分离出来,如果不适用,分离成单独的文件,默认是自动注入到内部的
// new ExtractTextPlugin({
// filename: '[name].css',
// })
],
//devtool:"#source-map" 用于调试
}

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

 var path = require("path"); //需要使用绝对路径
var HtmlWebpackPlugin = require("html-webpack-plugin");
const webpack=require("webpack");
const CleanWebpackPlugin = require('clean-webpack-plugin')
var ExtractTextPlugin = require("extract-text-webpack-plugin") module.exports = {
entry: { vendor:['jquery','./src/js/common.js'],
index: "./src/js/index.js",
cart: "./src/js/cart.js"
},
output: {
path: path.join(__dirname, "./dist"),
filename: "js/[name].js",
publicPath: ""
},
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
include: path.join(__dirname, 'src'),
exclude: /node_modules/,
}
,{
test: /\.css$/,
include: path.join(__dirname, 'src'),
exclude: /node_modules/,
loader: ExtractTextPlugin.extract({
fallback:"style-loader",
use:"css-loader"
}),
}
]
},
plugins: [
new CleanWebpackPlugin(["./dist"], {
root: path.join(__dirname, ""),
verbose: true,
dry: false
}),
//负责打包html文件 将js注入到html中,minify压缩html
new HtmlWebpackPlugin({
filename: "index.html",
template: "./src/index.html",
chunks: ["index","vendor"],
minify:{
removeComment:true,
collapseWhitespace:true
}
}),
new HtmlWebpackPlugin({
filename: "cart.html",
template: "./src/cart.html",
chunks: ["cart","vendor"]
}),
//压缩js代码
new webpack.optimize.UglifyJsPlugin({
compress:{
warnings:false
}
}),
//公共插件打包,抽取公共部分
new webpack.optimize.CommonsChunkPlugin({
name:'vendor',
chunks:['index','cart','vendor'],
mikChunks:
}),
new webpack.ProvidePlugin({
$:"jquery",
jQuery:"jquery",
'window.Jquery':"jquery"
}),
//可以将css代码分离出来,如果不适用,分离成单独的文件,默认是自动注入到内部的
new ExtractTextPlugin({
filename: 'css/[name].css',
})
],
//devtool:"#source-map" 用于调试
}

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

src下面的目录结构

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

package.json

 {
"name": "webpack",
"version": "1.0.0",
"description": "",
"main": "webpack.config.js",
"scripts": {
"server": "webpack-dev-server --open",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"webpack": "^3.3.0"
},
"devDependencies": {
"babel-core": "^6.26.3",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.7.0",
"clean-webpack-plugin": "^0.1.19",
"css-loader": "^0.28.11",
"extract-text-webpack-plugin": "^3.0.2",
"html-webpack-plugin": "^3.2.0",
"style-loader": "^0.21.0",
"webpack-dev-server": "^2.11.0"
}
}

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

 var path = require("path"); //需要使用绝对路径
var HtmlWebpackPlugin = require("html-webpack-plugin");
const webpack=require("webpack");
const CleanWebpackPlugin = require('clean-webpack-plugin')
var ExtractTextPlugin = require("extract-text-webpack-plugin") module.exports = {
entry: { vendor:['jquery','./src/js/common.js'],
index: "./src/js/index.js",
cart: "./src/js/cart.js"
},
output: {
path: path.join(__dirname, "./dist"),
filename: "js/[name]-[hash].js",
publicPath: ""
},
devServer:{
port:
},
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
include: path.join(__dirname, 'src'),
exclude: /node_modules/,
}
,{
test: /\.css$/,
include: path.join(__dirname, 'src'),
exclude: /node_modules/,
loader: ExtractTextPlugin.extract({
fallback:"style-loader",
use:"css-loader"
}),
}
]
},
plugins: [
//清除掉dist文件
new CleanWebpackPlugin(["./dist"], {
root: path.join(__dirname, ""),
verbose: true,
dry: false
}),
//负责打包html文件 将js、css注入到html中,minify压缩html,多文件的处理需要多个入口
new HtmlWebpackPlugin({
filename: "index.html",
template: "./src/index.html",
chunks: ["index","vendor"],
minify:{
removeComment:true,
collapseWhitespace:true
}
}),
new HtmlWebpackPlugin({
filename: "cart.html",
template: "./src/cart.html",
chunks: ["cart","vendor"]
}),
//压缩js代码
new webpack.optimize.UglifyJsPlugin({
compress:{
warnings:false
}
}),
//公共插件打包,抽取公共部分
new webpack.optimize.CommonsChunkPlugin({
name:'vendor',
chunks:['index','cart','vendor'],
mikChunks:
}),
new webpack.ProvidePlugin({
$:"jquery",
jQuery:"jquery",
'window.Jquery':"jquery"
}),
//可以将css代码分离出来,如果不适用,分离成单独的文件,默认是自动注入到内部的
new ExtractTextPlugin({
filename: 'css/[name]-[hash].css',
})
],
//devtool:"#source-map" 用于调试
}

新文章链接,更改为峰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. 字符编码——python学习

    python学习—字符编码 例如汉字“中” 十进制:20013 二进制:01001110 00101101(unicode)/11100100 10111000 10101101(utf-8) 十六进 ...

  2. 【Mac】解决「另一个活跃的 Homebrew 进程正在进行中」问题

    问题描述 在安装 tesseract 的语言包时,由于网络下载速度太慢,我按下 ctrl + z 退出了安装,当再次输入安装命令时,系统报错如下: 解决方法 使用以下命令删除 homebrew 进程锁 ...

  3. C语言编程练习 GPS数据处理

    题目内容: NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine ...

  4. SparkStreaming任务保持运行,定时任务监控进程,保证不挂掉

    cron任务:每隔1分钟启动脚本,检查进程是否运行.crontab -e */1 * * * * bash /data/spark/test.sh 检查进程,如果进程挂掉,重新启动Spark任务:给s ...

  5. R语言(自定义函数、循环语句、管道函数)

    学习R语言半年多了,以前比较注重统计方法上的学习,但是最近感觉一些基础知识也很重要.去年的参考资料是<R语言实战>,今年主要是看视频.推荐网易云课堂里的教程,很多资料都是很良心的~ 目前学 ...

  6. 为树莓派添加一个强实时性前端[原创cnblogs.com/helesheng]

    树莓派是最近流行嵌入式平台,其自由的开源特性以及低廉的价格,吸引了来 自全球的大量极客和计算机大咖的关注.来自各大树莓派社区的幕后英雄,无私地在这个开源硬件平台上做了大量的工作,将其打造成了世界上通用 ...

  7. SOC中的DFT和BIST对比与比较-IC学习笔记(二)

    ATE:ATE是Automatic Test Equipment的缩写,根据客户的测试要求.图纸及参考方案,采用MCU.PLC.PC基于VB.VC开发平台,利用TestStand&LabVIE ...

  8. 防360TAB页面的样式页面

    今天给朋友做了一个仿照360新tab页面的效果,主要就是一些样式和JQUERY的应用,超级简单,现在把源码放出来 源码下载

  9. Oracle入门第六天(上)——用户控制

    一.概述 权限的分类: 系统权限: 对于数据库的权限 对象权限: 操作数据库对象的权限 基本上,权限的控制和之前介绍的管理控制台是相通的,所以基本可以大概将此节看作图形化操作的SQL语句操作版本 二. ...

  10. 20155215 2016-2017-2 《Java程序设计》第10周学习总结

    20155215 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络概论 - 网络是能够彼此通信的计算机的总和. - 网络分为局域网和广域网. - 按照计 ...