oneOf:[] // 以下loader只会匹配一个
    enntry: ‘./src/js/index.js’,
    output: {
    finename: ‘js/built.[hash:10].js’,
    path:resolve(__dirname,’build’)
    }

    module:{
    {
    // 在package.json中eslintConfig —> airbnb
    test: /.js$/,
    // 优先执行
    enforce: ‘pre’,
    loader: ‘eslint-loader’,
    options: {
    fix: true
    }
    }
    rules: [
    {
    // 以下loader只会匹配一个
    oneOf: [
    // 正常来讲,一个文件只能被一个loader处理
    如果一个文件要被多个loader处理,那么一定要指定loader执行顺序
    先执行eslint,再执行babel
    {
    test: ‘/./js$/‘,
    exclude: /node-modules/,
    loader:’babel-loader’,
    options: {
    presets:[
    ‘@babel/preset-env’,
    {
    useBuiltInns: ‘usage’,
    corejs: {version: 3},
    targets: {
    chrome: ‘60’,
    firefox: ‘50’
    }
    }
    ],
    // 开启babel缓存
    // 第二次构建时,会读取之前的缓存(生产环境下没有HMR功能)
    catcheDirectory: true
    }
    },{}]
    }
    ]
    }

    目的: 为了解决每个文件会被loader都过一下(一个文件会匹配到多个loader的问题)
    plugins:[
    new MiniCssExtractPlugin({
    filename: ‘css/built.[hash:10].css’ // 新增hash值,webpack生成的hash值取前10位
    })
    new OptimizeCssAssetsWebpackPlugin(),
    new HtmlWebpackPlugin({
    tempalte: ‘./src/index.html’,
    minify: {
    collapseWhitespace: true,
    removeComments: true
    }
    })
    ]

    缓存
    babel缓存
    catcheDirectory: true
    —> 让第二次打包构建速度更快
    文件资源缓存:
    hash: 每次webpack构建时会生成的一个唯一的hash值。
    问题:因为js和css同时使用一个hash值,如果重新打包,会导致所有缓存失效。
    可能只改动一个文件,导致所有缓存失效
    chunkhash: 根据chunk生成hash值,如果打包来源于同一个chunk,哈希值就一样
    问题:js和css的hash值还是一样的
    因为css是在js中被引入的,所以同属于一个chunk
    chunk(代码块) 一个入口文件,入口文件中引入了其它文件,同属于同一个chunk
    contenthash: 根据问价的内容生成hash值。不同的问价hash值一定不一样