webpack打包多html开发案例
简单说明:
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开发案例的更多相关文章
- webpack打包多html开发案例新
闲来无事在原来简单打包案例的基础上,参考vue-cli的打包代码,改为多文件打包. 区别于上篇文章<webpack打包多html开发案例>,此次打包根据开发的不同环节进行打包,也就是有开发 ...
- 使用webpack打包js文件(隔行变色案例)
使用webpack打包js文件(隔行变色案例) 1.webpack安装的两种方式 运行npm i webpack -g全局安装webpack,这样就能在全局使用webpack的命令 在项目根目录中运行 ...
- 《React+Redux前端开发实战》笔记2:基于Webpack构建的Hello World案例(上)
这次搭建分为两部分:一部分是前期必要配置,一部分是开发React代码. [基于Webpack的React Hello World项目] 1.前期必要配置 (1)首先要确保读者的开发设备上已经安装过No ...
- 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML(转)
1.什么是工程化开发 软件工程的工程化开发概念由来已久,但对于前端开发来说,我们没有像VS或者eclipse这样量身打造的IDE,因为在大多数人眼中,前端代码无需编译,因此只要一个浏览器来运行调试就行 ...
- webpack打包优化之外部扩展externals的实际应用
目录 前言 externals定义 用法 string array object function regex 实际案例 打包时间 打包之后包的大小 浏览器加载 需要注意 参考 前言 使用vue-cl ...
- webpack+react+redux+es6开发模式
一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...
- [webpack] 配置react+es6开发环境
写在前面 每次开新项目都要重新安装需要的包,简单记录一下. 以下仅包含最简单的功能: 编译react 编译es6 打包src中入口文件index.js至dist webpack配置react+es6开 ...
- 使用webpack打包ThinkPHP的资源文件
使用webpack打包ThinkPHP的资源文件 利用自己的空余时间一直在维护http://www.wx2share.com这个小网站,全是一个人在弄,由于只租得起虚拟空间,所以后台采用了简单方便的T ...
- Webpack打包进阶
说在前面 由于使用了React直出,页面各项性能指标使人悦目.本篇将深入探讨目前PC部落所采用webpack打包优化策略,以及探讨PC部落并未使用的 webpack Code Splitting 代码 ...
随机推荐
- Python中各种进制之间的转化
1.十进制转化为其它进制 (1)bin(x):十进制转化为二进制 [实例1] x=bin(20) # x的值为字符串'0b10100' (2)oct(x):十进制转化为八进制 [实例2] x=oc ...
- Python调用time模块设置当前时间-指定时间
import datetimeimport time#新建元旦时间#将程序打包def A(): # 设定时间 newyear =datetime.datetime(2033,10,1) #调用当前时间 ...
- 怎样在windows上定时执行python脚本
作为一个需要在电脑上工作和学习的人,一件十分困扰我的事情就是怎样不受互联网中其他内容的干扰而专注于自己想要做的事情,有的时候真的是沉浸于微博上的消息,忘了自己本来想要做的事.不过我有一件神器,自己爱豆 ...
- Go学习笔记02
前言 上篇内容,介绍了如何在不同的系统上安装 Go 开发环境和部分参数的配置,也简单介绍了 package 的概念.导入方式和我对包的初始化过程的理解,关于初始化顺序的理解,可能有错误,后期会有修改, ...
- 脱离matlab运行可执行程序的步骤
MCR是由matlab的运行环境,占用不到600M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包.MCR环境的设置文件存放目录如 ...
- Oracle入门第一天(下)——数据库的管理
一.SQL Developer的使用 常用设置,参考:https://www.cnblogs.com/biGpython/archive/2012/03/30/2424739.html https:/ ...
- 20155320 实验四 Android程序设计
20155320 实验四 Android程序设计 实验内容 (一)Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for ...
- 实现Linux下dc的功能,计算后缀表达式的值
提交测试截图和码云练习项目链接,实现Linux下dc的功能,计算后缀表达式的值 -将运算符写在两个操作数之后的表达式称为"后缀表达式",如上面的中缀表达式可转换为后缀表达式1 2 ...
- 20155338 2016-2017-2《Java程序设计》实验四Android程序开发实验报告
2016-2017-2 20155338 <Java程序设计>实验四Android程序开发实验报告 实验过程及成果展示 1.修改res目录下的layout文件夹中的activity_mai ...
- RHCSA-day1
1. 破解密码 开机 e 进入编辑模式 linux16 /boot/.............................en_US.UTF_8 这行末尾插入 rd.break (空格) ctrl ...