webpack入门

267 阅读1分钟

安装插件

    webpack webpack-cli //基础包
    webpack-dev-server  //给开发环境提供一个web服务器

配置打包命令

package.json
"scripts": {
    "build": "webpack --config webpack.config.js --mode=production",
    "dev": "webpack serve"
}

entry 入口

    module.export = {
        // 重点
        entry: {
            main: './src/index.js'
        }
    }

output 出口

     module.export = {
        entry: {
            main: './src/index.js'
        },
        // 重点
        output: {
            path: path.resolve(__dirname, 'dist'), // 输出到硬盘的路径
            filename: 'bundle.js',
            publicPath: '/'  // 静态资源前缀路径
        }
    }

配置loader

     module.export = {
        entry: {
            main: './src/index.js'
        },
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: 'bundle.js'
        },
        // 重点
        module: {
            rules: [
                {
                    test: /\.txt$/,
                    use: 'raw-loader'
                }
            ]
        }
    }

配置plugin

     module.export = {
        entry: {
            main: './src/index.js'
        },
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: 'bundle.js'
        },
        module: {
            rules: [
                {
                    test: /\.txt$/,
                    use: 'raw-loader'
                }
            ]
        },
        // 重点
        plugins: [
            new HtmlWebpackPlugin({
                template: './src/index.html'
            })
        ]
    }

区分环境

1.--mode 设置process.env.NODE_ENV环境

2.--env 设置webpack配置文件参数

3.cross-env 设置node环境的process.env.NODE_ENV

4.DefinePlugin 设置模块内的全局变量

mode 两种模式

1. development 开发环境
    --mode=development
    会将process.env.NODE_ENV设置为 development
 
2. production 生产环境
    --mode=production
    会将process.env.NODE_ENV设置为 production

env

1.--env=development

2.--env=production

wepack.config.js 文件需要导出一个方法就能拿到env数据

mudule.export = (env, args) => {
    // 重点
    const environment = env.development ? 'development' : 'production'
    return {
        mode: environment,
        entry: {
            main: './src/index.js'
        },
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: 'bundle.js'
        },
        module: {
            rules: [
                {
                    test: /\.txt$/,
                    use: 'raw-loader'
                }
            ]
        },
        plugins: [
            new HtmlWebpackPlugin({
                template: './src/index.html'
            })
        ]
  }
}


DefinePlugin

    const webapck = require('webpack');
    
    mudule.export = (env, args) => {
    const environment = env.development ? 'development' : 'production'
    console.log(env)
    
    return {
        mode: environment,
        entry: {
            main: './src/index.js'
        },
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: 'bundle.js'
        },
        module: {
            rules: [
                {
                    test: /\.txt$/,
                    use: 'raw-loader'
                }
            ]
        },
        plugins: [
            new HtmlWebpackPlugin({
                template: './src/index.html'
            }),
            // 重点
            new webpack.DefinePlugin({
                'process.env.NODE_ENV': JSON.stringify(environment),
                'NODE_ENV': JSON.stringify(environment)
            })
        ]
  }
}

cross-env

npm install cross-env -D

cross-env NODE_ENV=development

可以在webpack.config.js中获取process.env.NODE_ENV

    const webapck = require('webpack');
    
    mudule.export = {
        // 重点
        mode: process.env.NODE_ENV
        entry: {
            main: './src/index.js'
        },
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: 'bundle.js'
        },
        module: {
            rules: [
                {
                    test: /\.txt$/,
                    use: 'raw-loader'
                }
            ]
        },
        plugins: [
            new HtmlWebpackPlugin({
                template: './src/index.html'
            }),
            new webpack.DefinePlugin({
                'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
                'NODE_ENV': JSON.stringify(process.env.NODE_ENV)
            })
        ]
  }

开发服务器配置 devServer

npm install webpack-dev-server

    const webapck = require('webpack');
    
    mudule.export = {
        // 重点
        mode: process.env.NODE_ENV
        entry: {
            main: './src/index.js'
        },
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: 'bundle.js'
        },
        // 重点
        devServer: {
            publicPath: '/', //静态资源前缀
            contentBase: path.resolve(__dirname, 'public'), //其他静态资源的前缀路径
            port: 8080, //默认端口
            open: false, // 启动开发服务的时候自动打开浏览器
            compress: true // 是否启用压缩  gzip
        },
        module: {
            rules: [
                {
                    test: /\.txt$/,
                    use: 'raw-loader'
                }
            ]
        },
        plugins: [
            new HtmlWebpackPlugin({
                template: './src/index.html'
            }),
            new webpack.DefinePlugin({
                'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
                'NODE_ENV': JSON.stringify(process.env.NODE_ENV)
            })
        ]
  }