webpack 基本配置

webpack.config.js

// npm i -D webpack webpack-cli
// npm i html-webpack-plugin
// npm i -D webpack-dev-server
// npm i -D style-loader css-loader
// npm i -D less-loader less style-loader sass-loader
// npm i -D postcss-loader postcss postcss-preset-env
// npm i -D tml-withimg-loader
// npm i -D url-loader file-loader image-webpack-loader  html-loader
// npm i -D mini-css-extract-plugin
// npm i -D optimize-css-assets-webpack-plugin
// npm i -D @babel/preset-env @babel/core

const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCssAssetsWebpackPlugin=require('optimize-css-assets-webpack-plugin');
const webpack = require('webpack'); // 访问内置的插件
const path = require('path');

module.exports = {
    entry: path.resolve(__dirname, './src/index.js'),
    output: {
        filename: 'js/index.js',
        path: path.resolve(__dirname, './dist'),
    },
    // mode: 'development',
    mode: 'production',
    plugins: [
        new webpack.ProgressPlugin(),
        new HtmlWebpackPlugin({
            template: './src/index.html',
            minify:{
                // 移除空格
                collapseWhitespace:true,
                // 移除注释
                removeComments:true
            }
        }),
        new MiniCssExtractPlugin({
            filename: 'css/[hash].css',
            // chunkFilename: "css/[id].css"
        }),
        // 压缩css
        new OptimizeCssAssetsWebpackPlugin()
    ],
    devServer: {
        // open: true,
        port: 8000,
        // 不检查域名
        disableHostCheck: true,
        // 开启gzip压缩
        compress: true,
        // 路径设置
        contentBase: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [
                    // 'style-loader',
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    // 'postcss-loader',
                    // 处理css兼容性处理
                    {
                        loader: "postcss-loader",
                        options: {
                            ident:'postcss',
                            plugins:()=>[require('postcss-preset-env')()]
                        },
                    }
                ]
            },
            {
                test: /\.less$/,
                use: ['style-loader', 'css-loader', 'less-loader']
            },
            {
                test: /\.(jpg|png|gif)$/,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            // 限制图片大小
                            limit: 1024 * 100,
                            // 关闭es6模块化
                            esModule: false,
                            // 给图片改名字
                            name: '[hash:10].[ext]',
                            outputPath: 'imgs'
                        }
                    }
                ]
            },
            {
                test: /\.(eot|ttf|woff|woff2|svg)$/,
                use: ['url-loader']
            },
            {
                test: /\.(htm|html)$/i,
                use: ['html-withimg-loader']
            },
            // 处理 es6 语法
            {
                test: /\.js$/,
                // use: 'babel-loader',
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: [
                            [
                                '@babel/preset-env',
                                {
                                    useBuiltIns:'usage',
                                    corejs:{
                                        version:3
                                    },
                                    targets:{
                                        chrome:'60',
                                        firefox:'60',
                                        ie:'9',
                                        safari:'10',
                                        edge:'17'
                                    }
                                }
                            ]
                        ]
                    }
                },
                exclude: /(node_modules|bower_components|ppaweb\\libs\\webpack)/
            },
        ],
    },
    performance: {
        hints: "warning", // 枚举
        maxAssetSize: 300000, // 整数类型(以字节为单位)
        maxEntrypointSize: 500000, // 整数类型(以字节为单位)
        assetFilter: function (assetFilename) {
            // 提供资源文件名的断言函数
            return assetFilename.endsWith('.css') || assetFilename.endsWith('.js');
        }
    }
};

package.json

{
  "name": "page1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "webpack-dev-server --hot",
    "build": "webpack"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.21.1",
    "html-webpack-plugin": "^3.2.0",
    "moment": "^2.29.1",
    "node-xlsx": "^0.17.1",
    "webpack": "^4.46.0",
    "webpack-cli": "^3.3.12"
  },
  "devDependencies": {
    "@babel/core": "^7.0.0",
    "@babel/plugin-proposal-class-properties": "^7.0.0",
    "@babel/plugin-proposal-decorators": "^7.0.0",
    "@babel/plugin-proposal-export-namespace-from": "^7.0.0",
    "@babel/plugin-proposal-function-sent": "^7.0.0",
    "@babel/plugin-proposal-json-strings": "^7.0.0",
    "@babel/plugin-proposal-numeric-separator": "^7.0.0",
    "@babel/plugin-proposal-throw-expressions": "^7.0.0",
    "@babel/plugin-syntax-dynamic-import": "^7.0.0",
    "@babel/plugin-syntax-import-meta": "^7.0.0",
    "@babel/plugin-transform-runtime": "^7.17.0",
    "@babel/preset-env": "^7.16.11",
    "babel-loader": "^8.0.0",
    "css-loader": "^2.1.1",
    "file-loader": "^4.3.0",
    "handlebars": "^4.7.7",
    "html-loader": "^2.1.2",
    "html-withimg-loader": "^0.1.16",
    "image-webpack-loader": "^3.6.0",
    "less": "^3.9.0",
    "less-loader": "^4.1.0",
    "mini-css-extract-plugin": "^0.9.0",
    "optimize-css-assets-webpack-plugin": "^6.0.1",
    "post-loader": "^2.0.0",
    "postcss": "^8.4.8",
    "postcss-loader": "^3.0.0",
    "postcss-preset-env": "^6.7.1",
    "regenerator-runtime": "^0.13.9",
    "sass-loader": "^7.3.1",
    "style-loader": "^0.23.1",
    "url-loader": "^2.3.0",
    "webpack-dev-server": "^3.11.2"
  },
  "browserslist": {
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ],
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ]
  }
}

.babelrc

{
    "presets": [
        "@babel/preset-env"
    ],
    "plugins": [
        "@babel/plugin-syntax-dynamic-import",
        "@babel/plugin-syntax-import-meta",
        "@babel/plugin-proposal-class-properties",
        "@babel/plugin-proposal-json-strings",
        [
            "@babel/plugin-proposal-decorators",
            {
                "legacy": true
            }
        ],
        "@babel/plugin-proposal-function-sent",
        "@babel/plugin-proposal-export-namespace-from",
        "@babel/plugin-proposal-numeric-separator",
        "@babel/plugin-proposal-throw-expressions"
    ]
}

 postcss.config.js

module.exports = { 
  plugins: { 
    'autoprefixer': {browsers: 'last 5 version'} 
  } 
}

 目录结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值