webpack生产环境的配置文件

本文详细介绍了Webpack开发环境配置文件的设置,涵盖CSS兼容性处理、JS语法转换、资源文件加载及压缩策略。通过具体配置示例,展示了如何利用各种插件实现高效前端构建流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

webpack开发环境的配置文件 其中处理了css兼容各种浏览器,js的兼容ES6、ES7等语法,图片或其他文件资源的处理以及css,js等的压缩
1、 webpack.config.js 配置文件

/**
 * webpack配置文件
 * webpack.config.js
 */
//  node.js内置模块
const path = require('path')
const htmlWebpackPlugin = require('html-webpack-plugin')
const miniCssExtractPlugin = require('mini-css-extract-plugin')
const optimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')

//  将公共的loader抽离
const commonCssLoader = [
    //  引入抽离css成单独文件的loader
    miniCssExtractPlugin.loader,
    'css-loader',
    //  使用postcss-loader处理css的兼容性
    {
        //  postcss找到package.json中的 browserslist 里面的配置,通过配置加载指定的css兼容性样式
        //	具体参考下方的package.json
        loader: 'postcss-loader',
        options: {
            ident: 'postcss',
            plugins: () => [
                require('postcss-preset-env')()
            ]
        }
    }
]

module.exports = {
    entry: './src/js/index.js',
    output: {
        filename: "js/built.js",
        path: path.resolve(__dirname, 'build')
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [...commonCssLoader]
            },
            {
                test: /\.less$/,
                use: [...commonCssLoader,'less-loader']
            },
            /**
             *  正常来讲,一个文件只能被一个loader处理
             *  当一个文件要被多个loader处理,那么一定要指定loader执行的先后顺序
             *  先执行eslint 在执行babel
             */

            {
                //  js的语法检测
                //  在package.json中eslintConfig --> airbnb
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'eslint-loader',
                //  优先执行
                enforce: "pre",
                options: {
                    fix: true
                }
            },
            {
                //  兼容 ES6、ES7等新语法
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'babel-loader',
                options: {
                    presets: [
                        //  通过 @babel/preset-env 完成了基本的兼容性处理,但对于如Promise等无法转换
                        //  再通过 core-js 按需处理Promise等,从而实现全部兼容
                        [
                            '@babel/preset-env',
                            {
                                //  按需加载
                                useBuiltIns: 'usage',
                                //  使用的core-js的版本
                                corejs: {version: 3},
                                //  兼容的浏览器
                                targets: {
                                    chrome: '60',
                                    firefox: '50'
                                }
                            }
                        ]

                    ]
                }
            },
            {
                test: /\.(jpg|jpeg|gif|png)$/,
                loader: 'url-loader',
                options: {
                    limit: 8 * 1024,
                    name: '[hash:8].[ext]',
                    outputPath: 'images',
                    esModule: false
                }
            },
            {
                test: /\.html$/,
                loader: 'html-loader'
            },
            {
                exclude: /\.(js|css|less|html|png|jpeg|gif|jpg)$/,
                loader: 'file-loader',
                options: {
                    outputPath: 'media'
                }
            }
        ]
    },
    plugins: [
        new htmlWebpackPlugin({
            template: "./src/index.html",
            minify: {
                //  去除空格
                collapseWhitespace: true,
                //  去除注释
                removeComments: true
            }
        }),
        //  抽离css成单独文件
        new miniCssExtractPlugin({
            filename: 'css/built.css'
        }),
        //  压缩css
        new optimizeCssAssetsWebpackPlugin()
    ],
    mode: "production"

}

2、package.json文件,里面包含了下载的各种插件

{
  "name": "demo1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.10.2",
    "@babel/polyfill": "^7.10.1",
    "@babel/preset-env": "^7.10.2",
    "babel-loader": "^8.1.0",
    "core-js": "^3.6.5",
    "css-loader": "^3.5.3",
    "eslint": "^7.1.0",
    "eslint-config-airbnb-base": "^14.1.0",
    "eslint-loader": "^4.0.2",
    "eslint-plugin-import": "^2.20.2",
    "file-loader": "^6.0.0",
    "html-loader": "^1.1.0",
    "html-webpack-plugin": "^4.3.0",
    "less-loader": "^6.1.0",
    "mini-css-extract-plugin": "^0.9.0",
    "mini-extract-plugin": "^1.4.3",
    "optimize-css-assets-webpack-plugin": "^5.0.3",
    "postcss-loader": "^3.0.0",
    "postcss-preset-env": "^6.7.0",
    "style-loader": "^1.2.1",
    "url-loader": "^4.1.0",
    "webpack": "^4.43.0",
    "webpack-cli": "^3.3.11",
    "webpack-dev-server": "^3.11.0"
  },
  "browserslist": {
    "development": [
    	// 指兼容最近的chrome版本
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ],
    "production": [
    	//	指兼容98%的浏览器
      ">0.2%",
      //	不包括dead
      "not dead",
      "not op_mini all"
    ]
  },
  "eslintConfig": {
  	//	语法检测用到 airbnb 的格式
    "extends": "airbnb-base"
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值