webpack.config.js配置
几个参数
1. mode
设置当前代码的模式
mode: development/production
development 是开发者模式点击dist查看打包后的文件可以看到里面的代码都是有注释的
production是发布时使用的模式,为了体积小,打包后的代码是没有注释的。
开发的时候使用
mode:development,发布的时候使用mode:production模式。
2. entry
指定程序入口文件
3. output
指定打包到的文件位置以及文件名等
webpack打包各种类型文件
转译js文件
webpack.config.js文件中设置入口js文件和出口文件名。
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].[contenthash].js'
}
};
[contenthash]用于生成hash值。当设置了HTTP请求中的cache-control字段后,浏览器就会将文件缓存再硬盘中,当浏览器下次加载页面的时候就会从硬盘中读取。如果哈希值发生改变就会重新到网络中加载对应的文件。这样做的好处就是提高重复加载资源的速率。
主页面是不需要被存储的,因为需要加载主页面来查看引用的资源的哈希值是否发生变化。如果主页面都被缓存了那么每次加载的资源就都是相同的。
转译html文件
安装 html-webpack-plugin 插件
yarn add --save-dev html-webpack-plugin
webpack.config.js
module.exports = {
plugins: [
new HtmlWebpackPlugin({
title: "sitename", //设置网页的title标签
filename: 'index.html', //指定文件名
template: 'src/assets/test.html' //使用目录中的html文件
})
],
};
转译css
css-loader
安装两个loader
yarn add --save-dev css-loader
yarn add --save-dev style-loader
配置webpack.config.js
module.exports = {
module: {
rules: [{
test: /\.css$/i,
use:["css-loader","style-loader"]
}]
},
};
xxx.js
import xxx.css
会在html文件中生成style标签
mini-css-extract-plugin
如果想要在HTML生成link标签需要下载mini-css-extract-plugin插件
npm install --save-dev mini-css-extract-plugin
具体如何配置自行搜索 mini-css-extract-plugin
配置完成后打包运行
得到引入的link文件
使用webpack-dev-server
webpack-dev-server可以用来实时的预览代码,当文件保存浏览器就会自动刷新。
webpack-dev-server每次刷新会在内存中将文件进行打包,而不是build到dist目录中。总而言之webpack-dev-server是比较快的。
具体配置执行查看webpack官网.
将webpack.config.js文件分解
我们在开发的时候,和发布的时候使用的webpack.config.js的文件内容是不同的。可以将webpack.config.js分为三个文件来处理。
webpack.config.base.js 基本的webpack配置
将webpack.config.js中不论开发还是打包都需要用到的文件放到这里。
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].[contenthash].js'
},
plugins: [
new HtmlWebpackPlugin({
title: "Ying",
filename: 'index.html',
template: 'src/assets/test.html'
})
],
};
webpack.config.prod.js 发布的webpack配置
同样的将发布时需要的配置放到这样文件中,并引入base文件。
例如mode:production模式
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const base = require('./webpack.config.base.js');
module.exports = {
...base,
mode: 'production',
plugins: [
...base.plugins,
new MiniCssExtractPlugin({ // 生成link引入
filename: '[name].[contenthash].css',
chunkFilename: '[id].[contenthash].css',
}),
],
module: {
rules: [{
test: /\.css$/i,
use: [{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '/public/path/to/',
},
},
'css-loader',
]
}]
},
};
webpack.config.js 默认开发配置
const path = require('path');
const base = require('./webpack.config.base.js');
module.exports = {
...base,
mode: 'development',
devtool: 'inline-source-map',
devServer: {
contentBase: './dist',
},
module: {
rules: [{
test: /\.css$/i,
use: ['style-loader', 'css-loader'], //生成style标签
}]
},
};
package.json
"scripts": {
+ "start": "webpack-dev-server --open",
+ "build": "rm -rf dist && webpack --config webpack.config.prod.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
总结
webpack的配置还是需要依据最新的官方文档为标准。
转译某类型文件都是需要使用起类型的loader的。拓展:loader和plugin的区别
学习webpack不在于把文档通读一遍,而是你在需要完成某个功能的时候去对应的搜索方法。