|
@@ -0,0 +1,149 @@
|
|
|
+const { resolve } = require("path");
|
|
|
+
|
|
|
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
|
|
+
|
|
|
+const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
|
|
|
+
|
|
|
+const EsLintPlugin = require('eslint-webpack-plugin')
|
|
|
+
|
|
|
+const HtmlWebpackPlugin = require('html-webpack-plugin')
|
|
|
+
|
|
|
+process.env.NODE_ENV = 'development'
|
|
|
+
|
|
|
+
|
|
|
+ * 缓存:
|
|
|
+ * babel缓存
|
|
|
+ * cacheDirectory: true
|
|
|
+ * 第二次打包速度更快
|
|
|
+ * 文件资源缓存 -- 上线代码性能优化
|
|
|
+ * hash值: 全部文件名修改,而且每次打包都会改变。
|
|
|
+ * chunkhash:根据chunk生成hash值,当打包来源于同一个chunk,hash值会一样。所以js中引入css是一个chunk,都会变化。
|
|
|
+ * contenthash:内容不变时,hash不变,所以不同文件,hash值不一样。
|
|
|
+ */
|
|
|
+
|
|
|
+const commonCssLoader = [
|
|
|
+ MiniCssExtractPlugin.loader,
|
|
|
+ 'css-loader',
|
|
|
+ {
|
|
|
+ loader: 'postcss-loader',
|
|
|
+ options: {
|
|
|
+
|
|
|
+
|
|
|
+ plugins: () => [
|
|
|
+ require('postcss-preset-env')()
|
|
|
+ ] */
|
|
|
+ postcssOptions: {
|
|
|
+ plugins: [
|
|
|
+ [
|
|
|
+ 'postcss-preset-env'
|
|
|
+ ],
|
|
|
+ ],
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+]
|
|
|
+
|
|
|
+module.exports = {
|
|
|
+ entry: './src/js/index.js',
|
|
|
+ output: {
|
|
|
+ filename: 'js/built.[contenthash:10].js',
|
|
|
+ path: resolve(__dirname, 'build')
|
|
|
+ },
|
|
|
+ module:{
|
|
|
+ rules:[{
|
|
|
+
|
|
|
+
|
|
|
+ oneOf:[
|
|
|
+ {
|
|
|
+ test:/\.css$/,
|
|
|
+ use: [
|
|
|
+ ...commonCssLoader
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ test:/\.less$/,
|
|
|
+ use:[
|
|
|
+ ...commonCssLoader,
|
|
|
+ 'less-loader'
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ test:/\.js$/,
|
|
|
+ exclude: /node_modules/,
|
|
|
+ loader: 'babel-loader',
|
|
|
+ options:{
|
|
|
+
|
|
|
+ presets:[
|
|
|
+ [
|
|
|
+ '@babel/preset-env',
|
|
|
+ {
|
|
|
+ useBuiltIns: 'usage',
|
|
|
+ corejs:{
|
|
|
+ version:3
|
|
|
+ },
|
|
|
+ targets:{
|
|
|
+ chrome: '60',
|
|
|
+ firefox: '60',
|
|
|
+ ie:'9',
|
|
|
+ safari: '10',
|
|
|
+ edge: '17'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ ],
|
|
|
+
|
|
|
+
|
|
|
+ cacheDirectory: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ test:/\.(jpg|png|jpeg|gif)/,
|
|
|
+ loader:'url-loader',
|
|
|
+ options:{
|
|
|
+ limit:8*1024,
|
|
|
+ name:'[hash:10].[ext]',
|
|
|
+ outputPath:'imgs',
|
|
|
+ esModule: false,
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ test:/\.html$/,
|
|
|
+ loader:'html-loader'
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ exclude:/\.(js|css|less|html|jpg|jpeg|png|gif)/,
|
|
|
+ loader:'file-loader',
|
|
|
+ options:{
|
|
|
+ outputPath:'media',
|
|
|
+ esModule: false,
|
|
|
+ name: '[hash:10].[ext]'
|
|
|
+ },
|
|
|
+ type: 'javascript/auto'
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }]
|
|
|
+ },
|
|
|
+ plugins:[
|
|
|
+ new MiniCssExtractPlugin({
|
|
|
+ filename: 'css/built.[contenthash:10].css'
|
|
|
+ }),
|
|
|
+ new OptimizeCssAssetsWebpackPlugin(),
|
|
|
+ new EsLintPlugin({
|
|
|
+ extensions: ['js', 'json', 'coffee'],
|
|
|
+
|
|
|
+ fix:true
|
|
|
+ }),
|
|
|
+ new HtmlWebpackPlugin({
|
|
|
+ template: './src/index.html',
|
|
|
+ minify:{
|
|
|
+ collapseWhitespace:true,
|
|
|
+ removeComments:true
|
|
|
+ }
|
|
|
+ })
|
|
|
+ ],
|
|
|
+ mode:'production',
|
|
|
+ devtool:'source-map'
|
|
|
+}
|