webpack4入门

package.json文件说明;

**{
  "name": "webpack",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "devDependencies": {
    "@babel/core": "^7.8.7",				//适配高版本js的loader
    "@babel/preset-env": "^7.8.7",			//适配高版本js的loader
    "babel-loader": "^8.0.6",				//适配高版本js的loader
    "clean-webpack-plugin": "^3.0.0",		//清除dist目录的插件
    "css-loader": "^3.4.2",					//让webpack能够识别解析 css 文件
    "file-loader": "^5.1.0",				//图片解析需用
    "html-webpack-plugin": "^3.2.0",		//自动生成html的插件;
    "mini-css-extract-plugin": "^0.9.0",	//分离css的插件,
    "node-sass": "^4.13.1",					
    "sass": "^1.26.3",								
    "sass-loader": "^8.0.2",				//让webpack能够识别解析sass文件
    "style-loader": "^1.1.3",				//style-loader 通过(js)动态的创建style标签的方式,让解析后的css内容,能够作用到页面中;
    "url-loader": "^3.0.0",					//配置图片文件的解析
    "webpack": "^4.42.0",
    "webpack-cli": "^3.3.11",
    "webpack-dev-server": "^3.10.3",		//开发服务器
    "webpack-merge": "^4.2.2"				//分离开发环境与发布环境
  },
  "scripts": {
  	//分离前的命令
  	//"dev": "webpack-dev-server --config webpack.config.js",
    //"build": "webpack --config webpack.config.js"
  	//分离后的命令
    "dev": "webpack-dev-server --config config/webpack.dev.js",
    "build": "webpack --config config/webpack.pro.js"
  },
  "dependencies": {
    "jquery": "^3.4.1"
  }
}
**

未分离的webpack.config.js文件

const path = require('path');

//引入自动生成 html 的插件
const HtmlWebpackPlugin = require('html-webpack-plugin');

//引入分离css 文件的 模块
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

//导入清除插件,可以在每次打包之前,清除dist目录的内容;
const {CleanWebpackPlugin} = require('clean-webpack-plugin');


//配置webpack 的配置文件,需要将配置的对象导出,给webpack使用;
module.exports = {

    //1. 入口 entry,从那个文件打包
    entry: './src/main.js',

    //2. 出口 output,打包到那里去
    output: {
        path: path.join(__dirname, 'dist'), //打包输出的目录 ( 输出目录必须是个绝对路径 )
        filename: "bundle.js"       //打包生成的文件名;
    },

    //3. 模式mode, development未压缩的, production 压缩的;
    mode: 'development',

    //4. 配置module模块加载规则
    //默认webpack只认识json,javascript, 不认识其他文件,如果希望打包处理其他文件,需要配置对应的loader
    module: {
        rules: [
            //(1) 配置css文件的解析
            {
                //正则:匹配所有以css结尾的文件;
                test: /\.css$/,

                //实际处理顺序:从右往左  <=
                // css-loader 让webpack能够识别解析 css 文件;
                //style-loader 通过(js)动态的创建style标签的方式,让解析后的css内容,能够作用到页面中;
                use: [{
                    loader: MiniCssExtractPlugin.loader,
                    options: {
                        publicPath: '../',  //公共资源加载的路径
                    },
                },
                    'css-loader']
            },
            //(2)配置sass文件的解析
            {
                test: /\.s[ac]ss$/,
                use: [{
                    loader: MiniCssExtractPlugin.loader,
                    options: {
                        publicPath: '../',  //公共资源加载的路径
                    },
                },
                    'css-loader', {
                    loader: 'sass-loader',
                    options: {
                        // Prefer `dart-sass`
                        implementation: require('sass'),
                    },
                }]
            },
            //(3)配置图片文件的解析
            {
                test: /\.(png|jpg|git)$/i,
                use: [
                    //url-loader 如果不配置,默认都会将文件转成base64字符串格式;
                    {
                        loader: 'url-loader',
                        //8kb以内,转成base64,节约请求次数;
                        options:{
                            limit: 8 * 1024,
                            //配置文件输出的文件名
                            name: '[name].[ext]',
                            //配置静态资源的引用路径
                            publicPath: '../images/',
                            //配置输出的文件目录,
                            outputPath: "images/"
                        },
                        
                    }
                ]
            },
            //(4)配置 适配高版本js;
            {
                test: /\.js$/,
                exclude: /(node_modules)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            }
        ]
    },

    //5. 配置插件;
    plugins: [
        //自动生成html的插件;
        new HtmlWebpackPlugin({ template: './public/index.html' }),

        //分离css的插件,定义打包好的文件存放的路径和文件名;
        new MiniCssExtractPlugin({filename: 'css/index.css'}),

        //清除dist目录的插件;
        new CleanWebpackPlugin()

    ],

    //6.配置开发服务器;
    devServer:{
        open:true,  //自动打开游览器
        port:3000,
    },
	//7.公共模块提取配置,公共模块大小必须大于30kb才回被独立打包;
    optimization:{
        splitChunks:{
            chunks:"all",       //提取所有文件的共同模块;是webpack内置的一个插件;
        }
    }

}

分离后的配置文件;

webpack.base.js

//公共配置;

const path = require('path');

//引入自动生成 html 的插件
const HtmlWebpackPlugin = require('html-webpack-plugin');

//引入分离css 文件的 模块
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

//导入清除插件,可以在每次打包之前,清除dist目录的内容;
const { CleanWebpackPlugin } = require('clean-webpack-plugin');


//配置webpack 的配置文件,需要将配置的对象导出,给webpack使用;
module.exports = {

    //1. 入口 entry,从那个文件打包
    entry: './src/main.js',

    //2. 出口 output,打包到那里去
    output: {
        path: path.join(__dirname, '../dist'), //打包输出的目录 ( 输出目录必须是个绝对路径 )
        filename: "bundle.js"       //打包生成的文件名;
    },


    //4. 配置module模块加载规则
    //默认webpack只认识json,javascript, 不认识其他文件,如果希望打包处理其他文件,需要配置对应的loader
    module: {
        rules: [
            //(1) 配置css文件的解析
            {
                //正则:匹配所有以css结尾的文件;
                test: /\.css$/,

                //实际处理顺序:从右往左  <=
                // css-loader 让webpack能够识别解析 css 文件;
                //style-loader 通过(js)动态的创建style标签的方式,让解析后的css内容,能够作用到页面中;
                use: [{
                    loader: MiniCssExtractPlugin.loader,
                    options: {
                        publicPath: '../',  //公共资源加载的路径
                    },
                },
                    'css-loader']
            },
            //(2)配置sass文件的解析
            {
                test: /\.s[ac]ss$/,
                use: [{
                    loader: MiniCssExtractPlugin.loader,
                    options: {
                        publicPath: '../',  //公共资源加载的路径
                    },
                },
                    'css-loader', {
                    loader: 'sass-loader',
                    options: {
                        // Prefer `dart-sass`
                        implementation: require('sass'),
                    },
                }]
            },
            //(3)配置图片文件的解析
            {
                test: /\.(png|jpg|git)$/i,
                use: [
                    //url-loader 如果不配置,默认都会将文件转成base64字符串格式;
                    {
                        loader: 'url-loader',
                        //8kb以内,转成base64,节约请求次数;
                        options: {
                            limit: 8 * 1024,
                            //配置文件输出的文件名
                            name: '[name].[ext]',
                            //配置静态资源的引用路径
                            publicPath: '../images/',
                            //配置输出的文件目录,
                            outputPath: "images/"
                        },

                    }
                ]
            },
            //(4)配置 适配高版本js;
            {
                test: /\.js$/,
                exclude: /(node_modules)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            }
        ]
    },

    //5. 配置插件;
    plugins: [
        //自动生成html的插件;
        new HtmlWebpackPlugin({ template: './public/index.html' }),

        //分离css的插件,定义打包好的文件存放的路径和文件名;
        new MiniCssExtractPlugin({ filename: 'css/index.css' }),

        //清除dist目录的插件;
        new CleanWebpackPlugin()

    ],

	//公共模块提取配置,公共模块大小必须大于30kb才回被独立打包;
    optimization:{
        splitChunks:{
            chunks:"all",       //提取所有文件的共同模块;是webpack内置的一个插件;
        }
    }

}

webpack.dev.js

//开发配置;

//导入公共配置;
const base = require('./webpack.base');


//导入一个用于合并的包
const merge = require('webpack-merge');

//导出开发环境配置
//merge 可以传入多个属性,后面的对象属性回覆盖前面的;

module.exports = merge(base,{

    //3. 模式mode, development未压缩的, production 压缩的;
    mode: 'development',

    //6.配置开发服务器;
    devServer: {
        open: true,  //自动打开游览器
        port: 3000,
    }

})

webpack.pro.js

//生产配置;

//导入公共配置;
const base = require('./webpack.base');


//导入一个用于合并的包
const merge = require('webpack-merge');

//导出生产环境配置
//merge 可以传入多个属性,后面的对象属性回覆盖前面的;
module.exports = merge(base, {
    //3. 模式mode, development未压缩的, production 压缩的;
    mode: 'production',

})

多入口,多出口配置

入口改成对象形式,出口filname改成filname:"js/[name].bundle.js"

 entry: {
        index:'./src/index.js',
        about:'./src/about.js'
    },

    //2. 出口 output,打包到那里去
    output: {
        path: path.join(__dirname, '../dist'), //打包输出的目录 ( 输出目录必须是个绝对路径 )
        filename: "js/[name].bundle.js"       //打包生成的文件名;[name]指代 entry 对象的键名;
    }

配置vue的loader

//安装依赖包
cnpm install vue-loader vue-template-compiler -D

webpack.base.js中引入vue-loader/lib/plugin

//引入 vue 的loader
const VueLoaderPlugin = require('vue-loader/lib/plugin');
module:{
			rules:{
				 //解析vue文件 vue-loader
           			 {
                		test:/\.vue$/,
                		loader:'vue-loader'
           			 }
			}
		}
		
    plugins: [
        //vue 的插件;vue-loader的使用都是需要伴生 VueLoaderPlugin的
        new VueLoaderPlugin()
    ],

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值