{
"name": "webpack_test",
"version": "1.0.0"
}
複製代碼
const {resolve} = require('path'); //node內置核心模塊,用來設置路徑。
module.exports = {
entry: './src/js/app.js', // 入口文件
output: { // 輸出配置
filename: './js/bundle.js', // 輸出文件名
path: resolve(__dirname, 'dist') //輸出文件路徑配置
},
mode: 'development' //開發環境(二選一)
mode: 'production' //生產環境(二選一)
};
複製代碼
module: {
rules: [
{
test: /\.js$/, //只檢測js文件
exclude: /node_modules/, //排除node_modules文件夾
enforce: "pre", //提早加載使用
use: { //使用eslint-loader解析
loader: "eslint-loader"
}
}
]
}
複製代碼
"eslintConfig": { //eslint配置
"parserOptions": {
"ecmaVersion": 8, // es8
"sourceType": "module", // ECMAScript 模塊
}
}
複製代碼
module: {
rules: [
{
oneOf: [ //數組中的配置只有一個可以生效, 後面的配置都會放在當前數組中
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
]
}
複製代碼
oneOf: [
{
test: /\.less$/,
use: [{
loader: "style-loader"
}, {
loader: "css-loader"
}, {
loader: "less-loader"
}]
}
]
複製代碼
添加2張圖片:css
在less文件中經過背景圖的方式引入圖片html
安裝loader前端
配置loadernode
{
test: /\.(png|jpg|gif|svg)$/,
use: [
{
loader: 'url-loader',
options: {
outputPath: 'images/', //在output基礎上,修改輸出圖片文件的位置
publicPath: '../dist/images/', //修改背景圖引入url的路徑
limit: 8 * 1024, // 8kb大小如下的圖片文件都用base64處理
name: '[hash:8].[ext]' // hash值爲7位,ext自動補全文件擴展名
}
}
]
}
複製代碼
運行指令:webpackwebpack
在index.html中引入打包生成的dist/js/bundle.js文件,觀察效果git
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
}),
]
複製代碼
{
test: /\.(html)$/,
use: {
loader: 'html-loader'
}
}
複製代碼
@font-face {
font-family: 'iconfont';
src: url('../media/iconfont.eot');
src: url('../media/iconfont.eot?#iefix') format('embedded-opentype'),
url('../media/iconfont.woff2') format('woff2'),
url('../media/iconfont.woff') format('woff'),
url('../media/iconfont.ttf') format('truetype'),
url('../media/iconfont.svg#iconfont') format('svg');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
複製代碼
{
loader: 'file-loader',
exclude: [/\.js$/, /\.html$/, /\.json$/],
options: {
outputPath: 'media/',
publicPath: '../dist/media/',
name: '[hash:8].[ext]',
},
}
複製代碼
devtool: 'inline-source-map', // 將編譯後的代碼映射回原始源代碼,更容易地追蹤錯誤和警告
devServer: {
contentBase: './dist', //項目根路徑
hot: true, //開啓熱模替換功能
open: true //自動打開瀏覽器
},
plugins: [
new webpack.NamedModulesPlugin(),
new webpack.HotModuleReplacementPlugin()
]
複製代碼
publicPath: '../dist/images/'
--> publicPath: 'images/'
publicPath: '../dist/media/'
--> publicPath: 'media/'
以上就是webpack開發環境的配置,能夠在內存中自動打包全部類型文件並有自動編譯運行、熱更新等功能。es6
module.exports = {
output: {
filename: 'js/[name].[hash:8].js', //添加了hash值, 實現靜態資源的長期緩存
publicPath: '/' //全部輸出資源公共路徑
},
module: { //loader其餘沒有變化,只放了變化部分,只有須要修改路徑部分改了
rules: [
{
oneOf: [
{
test: /\.(png|jpg|gif|svg)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 8 * 1024, // 8kb大小如下的圖片文件都用base64處理
name: 'images/[name].[hash:8].[ext]'
}
}
]
},
{
loader: 'file-loader',
exclude: [/\.js$/, /\.html$/, /\.json$/],
options: {
name: 'media/[name].[hash:8].[ext]',
},
}
]
}
]
},
mode: 'production', //修改成生產環境
}
複製代碼
new CleanWebpackPlugin()
複製代碼
{
test: /\.less$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'less-loader',
]
}
複製代碼
new MiniCssExtractPlugin({
filename: "css/[name].[hash:8].css",
chunkFilename: "css/[id].[hash:8].css"
})
複製代碼
{
test: /\.less$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader',
'less-loader',
]
}
複製代碼
module.exports = {
"plugins": {
"autoprefixer": {
"browsers": [
"ie >= 8",
"ff >= 30",
"chrome >= 34",
"safari >= 8",
"opera >= 23"
]
}
}
}
複製代碼
new OptimizeCssAssetsPlugin({
cssProcessorPluginOptions: {
preset: ['default', { discardComments: { removeAll: true } }],
},
})
複製代碼
{
test: /\.(png|jpg|gif|svg)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 8 * 1024, // 8kb大小如下的圖片文件都用base64處理
name: 'images/[name].[hash:8].[ext]'
}
},
{
loader: 'img-loader',
options: {
plugins: [
require('imagemin-gifsicle')({
interlaced: false
}),
require('imagemin-mozjpeg')({
progressive: true,
arithmetic: false
}),
require('imagemin-pngquant')({
floyd: 0.5,
speed: 2
}),
require('imagemin-svgo')({
plugins: [
{ removeTitle: true },
{ convertPathData: false }
]
})
]
}
}
]
}
複製代碼
new HtmlWebpackPlugin({
template: './src/index.html',
minify: {
removeComments: true,
collapseWhitespace: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
}
})
複製代碼
以上就是webpack生產環境的配置,能夠生成打包後的文件。github
到這裏基本配置已經告一段落了,全部配置我已經放在 倉庫 中了。web
第二期webpack優化配置已出~chrome