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 代码 ...
随机推荐
- 面试和工作中的map
map是C++ STL中的关联容器,存储的是键值对(key-value),可以通过key快速索引到value.map容器中的数据是自动排序的,其排序方式是严格的弱排序(stick weak order ...
- EAC 抓取CD为AAC文件
下载EAC v1.3 下载FAAC 安装完EAC以后进入主界面,选菜单EAC->compression option,如图: 选User Defined Encoder,选择之前解压好的faac ...
- FIR滤波器实例
Fs = 1000; % 采样频率 N = 1024; % 采样点数 ,即实际中一次FFT变换所使用的点数n = 0:N-1; % 采样序列,为plot绘图用的序列,其对应点表示的真实频率为 f = ...
- NoSQL入门第一天——NoSQL入门与基本概述
一.课程大纲 二.入门概述 1.为什么用NoSQL 单机MySQL的年代: 一个网站的访问量一般都不大,用单个数据库完全可以轻松应付. 我们来看看数据存储的瓶颈是什么? 1.数据量的总大小 一个机器放 ...
- 20155319《Java程序设计》实验三(敏捷开发与XP实践)实验报告
20155319<Java程序设计>实验三(敏捷开发与XP实践)实验报告 一.实验内容及步骤 (一)使用Code菜单 在IDEA中使用工具(Code->Reformate Code) ...
- underscore.js 分析 第四天
查看underscore包含多少属性和方法 通过阅读JavaScript 获取对象的键的数组 var a = _; var arr = Object.keys(a); console.log(arr) ...
- CentOS-6.4 minimal - 安装VMware Tools(linux)
本文参考自:http://www.cnblogs.com/xyq/p/4068018.html 1.挂载光驱 2./mnt下面默认显示以下文件 3.卸载/mnt 4.点击安装VMware Tools ...
- Spring学习(八)-----Spring注入值到集合类型的例子
下面例子向您展示Spring如何注入值到集合类型(List, Set, Map, and Properties). 支持4个主要的集合类型: List – <list/> Set – &l ...
- XAF-如何在详细视图界面显示按钮(含示例项目下载)
默认情况下,指定了按钮的Category后,将在对应的按钮容器显示按钮.有时候,我们需要将按钮显示在详细视图中. 本示例源码 创建一个控制器,并填加按钮.设置好了所有ID.Caption后,给Cate ...
- 学习HTML 第四节.插入图像
学习HTML 第四节.插入图像 全是文字的网页太枯燥了吧,我们来搞个图片上去! <!DOCTYPE html><html><head><meta charse ...