描述:webpack打包项目时的配置文件.
命令:yarn run build 或 npm run build
打包后,生成的文件在dist文件夹下
打包后,要在服务器环境下运行!!!
关于怎样运行,请查看:https://www.cnblogs.com/cisum/p/9370163.html ,
1 ‘use strict‘ 2 3 // 路径 4 const path = require(‘path‘) 5 // utils 6 const utils = require(‘./utils‘) 7 // webpack打包 8 const webpack = require(‘webpack‘) 9 // 来自cofig/index.js 10 const config = require(‘../config‘) 11 // 对象合并 12 const merge = require(‘webpack-merge‘) 13 // webpack基本配置 14 const baseWebpackConfig = require(‘./webpack.base.conf‘) 15 16 const CopyWebpackPlugin = require(‘copy-webpack-plugin‘) 17 const HtmlWebpackPlugin = require(‘html-webpack-plugin‘) 18 const ExtractTextPlugin = require(‘extract-text-webpack-plugin‘) 19 const OptimizeCSSPlugin = require(‘optimize-css-assets-webpack-plugin‘) 20 const UglifyJsPlugin = require(‘uglifyjs-webpack-plugin‘) 21 22 23 const env = require(‘../config/prod.env‘) 24 25 const webpackConfig = merge(baseWebpackConfig, { 26 module: { 27 rules: utils.styleLoaders({ 28 sourceMap: config.build.productionSourceMap, 29 extract: true, 30 usePostCSS: true 31 }) 32 }, 33 devtool: config.build.productionSourceMap ? config.build.devtool : false, 34 output: { 35 path: config.build.assetsRoot, 36 filename: utils.assetsPath(‘js/[name].[chunkhash].js‘), 37 chunkFilename: utils.assetsPath(‘js/[id].[chunkhash].js‘) 38 }, 39 plugins: [ 40 // http://vuejs.github.io/vue-loader/en/workflow/production.html 41 new webpack.DefinePlugin({ 42 ‘process.env‘: env 43 }), 44 // 混淆加密JavaScript 45 new UglifyJsPlugin({ 46 uglifyOptions: { 47 compress: { 48 warnings: false 49 } 50 }, 51 sourceMap: config.build.productionSourceMap, 52 parallel: true 53 }), 54 // 将css提取到自己的文件中 55 new ExtractTextPlugin({ 56 filename: utils.assetsPath(‘css/[name].[contenthash].css‘), 57 //将以下选项设置为“false”将不会从codesplit块中提取CSS。 58 //当webpack加载了codesplit块时,他们的CSS将使用style-loader动态插入。 59 //它当前设置为“true”,因为我们看到源代码包含在codesplit包中,当它是“false”时, 60 //增加文件大小:https://github.com/vuejs-templates/webpack/issues/1110 61 allChunks: true, 62 }), 63 //压缩提取的CSS。 我们正在使用这个插件,以便可能 64 //可以删除来自不同组件的重复CSS。 65 new OptimizeCSSPlugin({ 66 cssProcessorOptions: config.build.productionSourceMap 67 ? { safe: true, map: { inline: false } } 68 : { safe: true } 69 }), 70 //使用正确的资产哈希生成dist index.html以进行缓存。 71 //您可以通过编辑/index.html来自定义输出 72 new HtmlWebpackPlugin({ 73 filename: config.build.index, 74 template: ‘index.html‘, 75 inject: true, 76 minify: { 77 removeComments: true, 78 collapseWhitespace: true, 79 removeAttributeQuotes: true 80 // 更多选项: 81 // https://github.com/kangax/html-minifier#options-quick-reference 82 }, 83 // 通过CommonsChunkPlugin持续使用多个块的必要条件 84 chunksSortMode: ‘dependency‘ 85 }), 86 // 原本模块没有改变时,保持module.id稳定 87 new webpack.HashedModuleIdsPlugin(), 88 // enable scope hoisting 89 new webpack.optimize.ModuleConcatenationPlugin(), 90 // 将原本模块js拆分为自己的文件 91 new webpack.optimize.CommonsChunkPlugin({ 92 name: ‘vendor‘, 93 minChunks(module) { 94 // node_modules中的任何必需模块都将解压缩到原模块 95 return ( 96 module.resource && 97 /\.js$/.test(module.resource) && 98 module.resource.indexOf( 99 path.join(__dirname, ‘../node_modules‘) 100 ) === 0 101 ) 102 } 103 }), 104 105 //将webpack运行时和模块清单提取到自己的文件中 106 //每当应用程序包更新时,都会阻止更新供应商哈希 107 new webpack.optimize.CommonsChunkPlugin({ 108 name: ‘manifest‘, 109 minChunks: Infinity 110 }), 111 112 //此实例从代码拆分块中提取共享块并捆绑它们 113 //在一个单独的块中,类似于供应商块 114 // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk 115 new webpack.optimize.CommonsChunkPlugin({ 116 name: ‘app‘, 117 async: ‘vendor-async‘, 118 children: true, 119 minChunks: 3 120 }), 121 122 // 复制自定义静态目录 123 new CopyWebpackPlugin([ 124 { 125 from: path.resolve(__dirname, ‘../static‘), 126 to: config.build.assetsSubDirectory, 127 ignore: [‘.*‘] 128 } 129 ]) 130 ] 131 }) 132 133 134 // 配置Gzip压缩 135 if (config.build.productionGzip) { 136 const CompressionWebpackPlugin = require(‘compression-webpack-plugin‘) 137 138 webpackConfig.plugins.push( 139 new CompressionWebpackPlugin({ 140 asset: ‘[path].gz[query]‘, 141 algorithm: ‘gzip‘, 142 test: new RegExp( 143 ‘\\.(‘ + 144 config.build.productionGzipExtensions.join(‘|‘) + 145 ‘)$‘ 146 ), 147 threshold: 10240, 148 minRatio: 0.8 149 }) 150 ) 151 } 152 153 // 使用交互式可缩放树形图可视化webpack输出文件的大小 154 if (config.build.bundleAnalyzerReport) { 155 const BundleAnalyzerPlugin = require(‘webpack-bundle-analyzer‘).BundleAnalyzerPlugin 156 webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 157 } 158 159 module.exports = webpackConfig
11
原文地址:https://www.cnblogs.com/cisum/p/9612553.html
时间: 2024-10-03 04:54:24