webpack 打包出多个HTML文件,多个js文件,图片文件放置到指定文件夹中

时间:2023-04-27 10:58:32

一、webpack.config.js简单代码

const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
//mode 指打包模式
//development 指开发模式,代码未压缩
//production 指产品模式,代码压缩
mode: 'development', //development and production //entry 指明入口文件,webpack 会从这个文件开始连接所有的依赖。
entry: {
'./js/first': __dirname + '/src/first.js',
'./js/second': __dirname + '/src/second.js',
}, //output 指明出口文件, 即打包后的文件存放的位置
output: {
path: __dirname + '/dist',
filename: '[name]_bundle_[hash].js',
}, //文件加载器 loader
//loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)
module: {
rules: [
...
]
}, // 本地服务器配置
devServer: {
contentBase: './dist', //默认本地服务器所在的根目录
historyApiFallback: true, //是否跳转到index.html
inline: true, //源文件改变时刷新页面
port: 8084 //端口号,默认8080
}, //插件
plugins: [
...
]
}

二、webpack.config.js各个模块的介绍

1. mode 介绍

module.exports = {
mode: 'production' //或者 development
};

解释: 通过选择 development 或 production 之中的一个,来设置 mode 参数,你可以启用相应模式下的 webpack 内置的优化

development  表示 开发模式,代码不会压缩(有利于断点调试)

production 表示 产品模式, 代码会进行压缩(不利于断点调试)

2. devServer介绍

module.exports = {
// 本地服务器配置
devServer: {
contentBase: './dist', //默认本地服务器所在的根目录
historyApiFallback: true, //是否跳转到index.html
inline: true, //源文件改变时刷新页面
port: 8084 //端口号,默认8080
},
}

介绍: 来自 webpack-dev-server 插件的 部分功能

解释: webpack-dev-server 可以开启本地服务器,便于开发

详细请查找 https://www.webpackjs.com/configuration/dev-server/

3. module介绍

    // loader设置
module: {
rules: [
{
test: /\.(css|sass|scss)$/,
loaders: ['style-loader', 'css-loader']
},
{
test: /\.(jsx|js)$/,
use: [{
loader: 'babel-loader',
options: {
presets: [
'env', 'react', 'stage-0'
]
}
}]
},
{
test: /\.xml$/,
loaders: ['xml-loader']
},
{
test: /\.(png|svg|jpg|gif|mp4)$/,
use: [{
loader: 'file-loader',
options: {
outputPath: './img',
publicPath: './img'
}
}]
}
]
},

介绍: module.loaders 允许在 webpack 配置中指定多个 loader

例如: babel-loader、style-loader、css-loader、sass-loader、file-loader等,这些都需要先 npm install

那么如何在打包时,将图片文件放置到指定文件夹中呢?

options: {
outputPath: './img', //指定放置目标文件的文件系统路径
publicPath: './img' //指定目标文件的自定义公共路径
}

通过设置 outputPath 可以使得打包后的文件放置到指定的文件夹中(./img)

4. plugins

    plugins: [
new HtmlWebpackPlugin({ //输出html文件1
title: '123', //生成html文件的标题
favicon: './favicon.png', //生成html文件的favicon的路径
filename: 'first.html', //生成html文件的文件名,默认是index.html
template: 'first.html', //本地html文件模板的地址
hash: true,
chunks: ['./js/first']
}),
new HtmlWebpackPlugin({ //输出html文件2
title: '123',
favicon: './favicon.png',
filename: 'second.html',
template: 'second.html',
hash: true,
chunks: ['./js/second']
})
]
  • hash:true|false,是否为所有注入的静态资源添加webpack每次编译产生的唯一hash值,添加hash形式如下所示:
    <script type="text/javascript" src="common.js?a3e1396b501cdd9041be"></script>
  • chunks:允许插入到模板中的一些chunk,不配置此项默认会将entry中所有的thunk注入到模板中。在配置多个页面时,每个页面注入的thunk应该是不相同的,需要通过该配置为不同页面注入不同的thunk;
    此处的chunks和 前面的 entry 入口文件 对应
    entry: {
    './js/first': __dirname + '/src/first.js',
    './js/second': __dirname + '/src/second.js',
    },

      

5. output

//output 指明出口文件, 即打包后的文件存放的位置
output: {
path: __dirname + '/dist',
filename: '[name]_bundle_[hash].js',
},

介绍: output 模块指明 项目打包的出口文件

path:表示出口文件的路径

filename:表示出口js文件的命名,此处的[name]对应 entry入口文件的名称,[hash]在每次编译时产生唯一的hash值

6. entry

//entry 指明入口文件,webpack 会从这个文件开始连接所有的依赖。
entry: {
'./js/first': __dirname + '/src/first.js',
'./js/second': __dirname + '/src/second.js',
},

介绍: entry 模块 指明 项目的入口js文件, 可以有多个

'./js/first' : 是指 文件打包后的路径(放置在js文件夹中),和 output 模块中的 [name] 以及 HtmlWebpackPlugin 插件 中的 chunk 对应


三、最后,完整webpack.config.js代码

const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
// 模式设置
mode: 'development', //development and production // 入口设置
// 使用babel-polyfill 可以兼容低版本浏览器(不支持es6)
entry: {
'./js/first': ['babel-polyfill', __dirname + '/src/first.js'],
'./js/second': ['babel-polyfill', __dirname + '/src/second.js'],
}, // 出口设置
output: {
path: __dirname + '/dist',
filename: '[name]_bundle_[hash].js',
}, // loader设置
module: {
rules: [
{
test: /\.(css|sass|scss)$/,
loaders: ['style-loader', 'css-loader']
},
{
test: /\.(jsx|js)$/,
use: [{
loader: 'babel-loader',
options: {
presets: [
'env', 'react', 'stage-0'
]
}
}]
},
{
test: /\.xml$/,
loaders: ['xml-loader']
},
{
test: /\.(png|svg|jpg|gif|mp4)$/,
use: [{
loader: 'file-loader',
options: {
outputPath: './img',
publicPath: './img'
}
}]
}
]
}, // 本地服务器 webpack-dev-server插件,开发中server,便于开发,可以热加载
devServer: {
contentBase: './dist', //默认本地服务器所在的根目录
historyApiFallback: true, //是否跳转到index.html
inline: true, //源文件改变时刷新页面
port: 8084 //端口号,默认8080
}, // 插件设置
// HtmlWebpackPlugin 可以在开发中按照模板生成 html文件
plugins: [
new HtmlWebpackPlugin({ //输出html文件1
title: '123', //生成html文件的标题
favicon: './favicon.png', //生成html文件的favicon的路径
filename: 'first.html', //生成html文件的文件名,默认是index.html
template: 'first.html', //本地html文件模板的地址
hash: true,
chunks: ['./js/first']
}),
new HtmlWebpackPlugin({ //输出html文件2
title: '123',
favicon: './favicon.png',
filename: 'second.html',
template: 'second.html',
hash: true,
chunks: ['./js/second']
})
]
}

webpack.config.js完整代码