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 代码 ...
随机推荐
- BurpSuite—-Scanner模块(漏洞扫描)
一.简介 Burp Scanner 是一个进行自动发现 web 应用程序的安全漏洞的工具.它是为渗透测试人员设计的,并且它和你现有的手动执行进行的 web 应用程序半自动渗透测试的技术方法很相似. 使 ...
- SSM-CRUD入门项目——删除
删除 分析 可以进行单个删除,直接点击每条记录后的删除按钮 批量删除,通过勾选checkbox框进行选择删除 单个删除: 通过发送DELETE请求的URL:/emp/{id} 这次我们先从contro ...
- 2015521 实验四 Android程序设计
<JAVA程序设计> 20155214 实验四 Android程序设计 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android.组件.布局管 ...
- 学号20155311 2016-2017-2 《Java程序设计》第4周学习总结
教材学习内容总结 6.1 何谓继承 何谓继承 面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承,滥用继承而导致程序维护上的问题时有所闻.如何正确判断使用继承的时机, ...
- js获取上月的最后一天
一.问题: 在最近的开发中遇到一个需求,需要初始化默认时间为上月的最后一天 而在日历中这个值在每个月都不是固定的 二.分析: 问题可以转化为,获取指定月份时间的月末最后一天,下边是代码,供大家参考 f ...
- 1009 产生数 2002年NOIP全国联赛普及组
1009 产生数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个整数 n(n< ...
- ELKStack入门篇(四)之Filebeat
Filebeat是轻量级单用途的日志收集工具,用于在没有安装java的服务器上专门收集日志,可以将日志转发到logstash.elasticsearch或redis等场景中进行下一步处理. 官方文档: ...
- hadoop hdfs 找不到本地库解决办法
export LD_LIBRARY_PATH=/usr/lib/hadoop-0.20-mapreduce/lib/native/Linux-amd64-64 <-- HAOOP_HOME/li ...
- 【轮子狂魔】打造简易无配置的IoC
如何指定Business Event和Command之间的关系? 既然是基于惯例优先原则,那么我们首先需要定义一个惯例: 1.调度事件和调度处理器之间是一对多关系(多对多的话,相信你看完了以后应该会知 ...
- 九、EnterpriseFrameWork框架基础功能之消息管理
记得阿朱在<走出软件作坊>一书中有一章讲客户提的需求太邪门了,鼠标键盘不太会用要程序员开发一个语音输入功能,还要系统中带类似QQ的功能:确实刚开始的客户的想法有点天真,但是随着信息化的越来 ...