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 代码 ...
随机推荐
- pycharm社区版新建django文件不友好操作
一.cmd操作 1.django-admin startproject (新建project名称) 2.在pycharm打开project,运行终端输入:python manage.py starta ...
- SpringBoot入门案例——创建maven Module方式
最近看到一个大牛写的spring boot案例,链接贴这 https://github.com/ityouknow/spring-boot-examples.git 这里通过在maven里创建多个mo ...
- leetcode记录-回文数
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...
- 20155216 2016-2017-2 《Java程序设计》第十周学习总结
20155216 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 了解计算机网络基础 概念 计算机网络基础,是指将地理位置不同的具有独立功能的多台计算机及其外 ...
- 20155223 2006-2007-2 《Java程序设计》第一周学习总结
20155223 2006-2007-2 <Java程序设计>第一周学习总结 学习内容 提问 第三章:Java没有能够计算开根号的运算符,我遇到开根运算该怎么办? 第四章:Java有没有比 ...
- 20155313 2016-2017-2 《Java程序设计》第二周学习总结
20155313 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 1.1 基本类型 整数:可细分为short整数(占2字节).int整数(占4字节)与long ...
- ConfigurationManager 读写AppSettings键值对
using System; using System.Configuration; namespace ConsoleApplication1 { class Program { static voi ...
- [BZOJ1857][SCOI2010]传送带-[三分]
Description 传送门 Solution 三分套三分.代码简单但是证明苦兮兮.. 假如我们在AB上选了一个点G,求到该点到D的最小时间. 图中b与CD垂直.设目前从G到D所耗时间最短的路径为G ...
- 【转载】GC基本算法及C++GC机制
原文: GC基本算法及C++GC机制 阅读目录 前言 基本概念 有向可达图与根集 三种基本的垃圾收集算法及其改进算法 1.引用计数算法 2. Mark & Sweep 算法 3. 节点复制算法 ...
- jquery.validate使用 - 5
一些常用的验证脚本 不会写js了,只能从网上找一些常用的验证脚本. // 手机号码验证jQuery.validator.addMethod("mobile", function(v ...