webpack.config.js

webpack.config.js笔记

/*
  webpack.config.js webpack的配置文件
  作用:指示 webpack 干那些活(当你运行webpack指令时,会加载里面的配置)

  所有构建工具是基于nodejs平台运行的   模块化默认采用commonjs
*/
/*
    loader:1.下载  2.使用(配置loader)
    plugins:1.下载  2.引入  3.使用
*/

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin')
const path = require('path')  //const { resolve } = require('path')   resolve(__dirname, 'build')
const NODE_ENV = 'development'  //开发模式
const devMode = NODE_ENV !== 'production';//mode: 'production',

module.exports = {
    //webpack配置
	//模式
	mode: NODE_ENV, 
	
    //入口起点
    entry: path.join(__dirname, "/src/index.js"), // 唯一入口文件

    //输出
    output: {
        //输出文件名
        filename: "js/bundle.js" // 打包后输出文件的文件名
        //输出路径  __dirname  nodejs的变量,代表当前文件的目录绝对路径
        //path: resolve(__dirname, 'build')
        path: path.join(__dirname, 'dist'), // 打包后的文件存放的路径
    },
    //loader配置
    module: {
        rules: [
            //详细loader的配置
            //不同文件必须配置不同loader处理
            {
                //配置那些文件
                test: /\.css$/,
                //使用那些loader进行处理
                use: [
                    //use数组中loader执行顺序:从左到右,从下到上 依次执行
                    // 创建style标签,将js中的样式资源插入进行,添加到head中生效
                    devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
                    //将css文件变成commonjs模块加载js中,里面内容是样式内容
                    'css-loader'
                ]
            },
            {
                //配置那些文件
                test: /\.less$/,
                //使用那些loader进行处理
                use: [
                    //use数组中loader执行顺序:从左到右,从下到上 依次执行
                    // 创建style标签,将js中的样式资源插入进行,添加到head中生效
                    devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
                    //将css文件变成commonjs模块加载js中,里面内容是样式内容
                    'css-loader',
                    //将less文件变成css文件
                    'less-loader'
                ]
            },
            {
                //默认处理不了html img图片
                //处理图片资源
                test: /\.(jpg|png|gif|jpeg|ico)$/,
                //使用一个loader 下载 url-loader   file-loader
                loader: 'url-loader',
                options: {
                    //图片大小小于8KB,就会被base64处理   
                    //优点:减少请求数量(减轻服务器压力)  
                    //缺点:图片体积会更大(文件请求速度更慢)
                    limit:8*1024,
                    //问题:url-loader默认使用es6 的模块化解析,而html-loader 
                    //引入图片是commonjs  [object Module]   
                    //所以使用 esModule:false 关闭es6 的url-loader,使得commonjs解析
                    esModule:false,  
                    //[hash:9]取图片的hash的前9位       .[ext]取文件原来拓展名
                    name:'[hash:9].[ext]',
                    outputPath:'imgs'
                },
                type:'javascript/auto'
            },
            {
            	//处理html文件中的img图片 (负责引入img 能被url-loader进行处理)
                test: /\.html$/,
                loader: 'html-loader'
            }
        ]
    },

    //plugins的配置
    plugins: [
        //html-webpack-plugin
        //功能:默认会创建一个空的html。自动引入打包输出的所有js/css
        //需求:需要有结构的html
        new HtmlWebpackPlugin({
            //复制 './src/index.html' 文件,并自动引入打包输出的所有资源(js/css)
            template: './src/index.html'
        }),
        new MiniCssExtractPlugin({
            // Options similar to the same options in webpackOptions.output
            // both options are optional
            filename: devMode ? '[name].css' : '[name].[hash].css',
            chunkFilename: devMode ? '[id].css' : '[id].[hash].css',
        }),
    ],

	//开发服务器 devServer:用来自动化(自动编译,自动打开浏览器,自动刷新浏览器)
    //特点:只会在内存中编译打包  不会有任何输出
    //启动devServer指令为:npx webpack-dev-server
    devServer: {
        // contentBase: resolve(__dirname, 'build'),
        // static: resolve(__dirname, "build"),
        static: path.join(__dirname, 'dist'),
        //启动gzip压缩
        compress: true,
        //端口号
        port: 3000,
        //自动打开浏览器
        open: true
    }
}

path和resolve的区别


const path0 = path.resolve(__dirname, 'dist');
const path1 = path.resolve(__dirname, '/dist');
const path2 = path.resolve(__dirname, './dist');

const path3 = path.join(__dirname, './dist');
const path4 = path.join(__dirname, '/dist');
const path5 = path.join(__dirname, 'dist');

console.log(path0);  //D:\TS\webpack\dist
console.log(path1);  //D:\dist
console.log(path2);  //D:\TS\webpack\dist
console.log(path3);  //D:\TS\webpack\dist
console.log(path4);  //D:\TS\webpack\dist
console.log(path5);  //D:\TS\webpack\dist

//总结
//path.resolve 中 'dist' 和 './dist' 等价。
//path.join 中 'dist' 、'/dist' 和 './dist' 三者等价。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不秃头的LT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值