const webpack = require('webpack');
const path = require('path');
/**
* Plugin that simplifies creation of HTML files to serve your bundles
* npm i --save-dev html-webpack-plugin
* @type {HtmlWebpackPlugin}
*/
const HtmlWebpackPlugin = require('html-webpack-plugin');
/**
* A webpack plugin to remove/clean your build folder(s) before building
* npm i clean-webpack-plugin --save-dev
* @type {CleanWebpackPlugin}
*/
const CleanWebpackPlugin = require('clean-webpack-plugin');
/**
* 提取css到单独文件
* npm install --save-dev mini-css-extract-plugin
*/
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
/**
* css 压缩 会清除css中注释
* npm install --save-dev optimize-css-assets-webpack-plugin
*/
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
/**
* js 压缩
* npm install uglifyjs-webpack-plugin --save-dev
*/
const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
module.exports = {
mode: 'production',
/**
* entry 输入文件
*/
entry: {
/**
* common 自定义公共文件
* common: ['./commons/a.js', "./commons/b.js"],
*/
common: [],
/**
* app 主文件
*/
app: './main.js',
},
/**
* 打包输出
*/
output: {
/**
* publicPath
* 生成如下链接
* <script type="text/javascript" src="/cx/tpl/Support/search/dist/build.js">
*/
publicPath: '/cx/tpl/Support/search/dist/',
/**
* [name] 指向entry 的key 也就是 app
*/
filename: '[name].js',
path: path.resolve(__dirname, 'dist/'),
},
plugins: [
/**
* 打包HTML
*/
new HtmlWebpackPlugin({
title: 'Output Management',
/**
* template 指定要打包的原文件
*/
template: './online.html'
}),
/**
* 由 webpack 生成的文件或目录才能被 CleanWebpackPlugin 删除
* 下面配置的是 打包前 需要被删除的目录
*/
new CleanWebpackPlugin(['dist', 'build']),
new MiniCssExtractPlugin({
filename: "[name].css",
chunkFilename: "[id].css"
}),
// new webpack.optimize.DedupePlugin(),
/**
* 提取SourceMap到独立文件
*/
new webpack.SourceMapDevToolPlugin({
filename: '[name].js.map',
// exclude: ['vendor.js']
})
],
/**
* devtool 调试工具,用来追踪被打包前源文件的错误
* 关闭可减少打包文件的大小
*/
// devtool: 'inline-source-map',
module: {
rules: [
{
/**
* https://www.npmjs.com/package/babel-loader
* npm install -D babel-loader @babel/core @babel/preset-env webpack
*/
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', '@babel/react']
}
}
},
{
test: /\.css$/,
use: [
{
loader: MiniCssExtractPlugin.loader,
options: {
// you can specify a publicPath here
// by default it use publicPath in webpackOptions.output
publicPath: '../'
}
},
"css-loader"
]
}
]
},
optimization: {
/**
* 分包
*/
splitChunks: {
chunks: 'all',
minSize: 30000,
maxSize: 0,
},
minimizer: [
new UglifyJsPlugin({
cache: true,
parallel: true,
/**
* sourceMap 和 devtool: 'inline-source-map', 冲突
*/
sourceMap: false, // set to true if you want JS source maps,
/**
* extractComments 导出备注
*/
extractComments: 'all'
}),
new OptimizeCSSAssetsPlugin({})
]
}
};
webpack4完全配置(js分组打包分模块打包压缩提取备注和css压缩打包)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1 Webpack 1.1 概念简介 1.1.1 WebPack是什么 1、一个打包工具 2、一个模块加载工具 3...
- Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...