webpack学习与实践第一篇

1:webpack是什么?
是模块打包工具,它会将前端的所有的资源文件(js,css,json,img,less)都会作为模块处理。模块的依赖关系进行静态的分析,生成对应的静态资源。

2:什么是loader?
webapck本身只能处理js/json模块,如果要加载其他的模块,需要使用对应的loader,进行转换、加载。loader本身也是运行在node.js环境中的javascript模块,它是一个函数,接受源文件作为参数,返回转换的结果。

3:什么是插件?
可以完成一些loader不能完成的功能,在webpack配置信息plugins选项中进行一个指定。
cleanWebpackPlugin:自动清除指定文件夹资源
HtmlWebpackPlugin:自动生成html文件
UglifyJSPlugin:压缩js文件

4:
安装:npm i webpack webpack-cli -D
核心模块
Webpack的五个核心
Entry:打包的入口
Output:打包到哪儿去
Loader:通过loader不能直接打包的文件
Plugins:插件设置
Mode: 设置模式

5:
1:对css,less样式进行打包。
首先在webpack.config.js中进行一个配置:

const {resolve}=require('path');
module.exports={
    //入口起点
    entry: resolve(__dirname,'src/index.js'),
    //输出
    output:{
     filename:'built.js',
     //当前目录的绝对路径
     path:resolve(__dirname,'bulid')
    },
    //loader的配置
    module:{
        rules:[
          {
           //匹配哪些文件
           test: /\.css$/,
           //使用哪些loader
           use:[
               //创建style的标签,然后将js中的样式模式资源插入进行,添加到head中生效
               'style-loader',
               //将css文件变成common.js模块加载js中,里面是样式字符串
               'css-loader'
           ]
          },
          {
            //匹配哪些文件
            test: /\.less$/,
            //使用哪些loader
            use:[
                //创建style的标签,然后将js中的样式模式资源插入进行,添加到head中生效
                'style-loader',
                //将css文件变成common.js模块加载js中,里面是样式字符串
                'css-loader',
                'less-loader'

            ]
           }
        ]
    },
     plugins:[
         
     ]
    
    ,
    //开发者环境,生产者环境(会对代码进行压缩)
    mode:'development'
    // mode:'production'
}

下载less-loader,css-loader,style-loader
npm i less-loader css-loader style-loader -D

输入webpack进行打包

2:对html进行打包,需要用到插件
安装:npm i html-webpack-plugin -D
在webpack.config.js中进行一个配置:

const { resolve } = require("path");
const HtmlWebpackPlugin=require('html-webpack-plugin')
module.exports={
    entry:'./src/index.js',
    output:{
        filename:'built.js',
        path:resolve(__dirname,'build')
    },
    module:{
        rules:[

        ]
    },
    plugins:[
    //创建一个空的html文件,自动引入打包输出的所有的资源(js/css)
    //需求:需要有结构的html文件
      new HtmlWebpackPlugin({
          template:'./src/index.html'
      })
    ],
    mode:'development'
    // mode:'production'
}

输入webpack进行打包

3:Url-loader
下载资源:npm i url-loader file-loader -D
在webpack.config.js中进行一个配置:
在这里插入图片描述
在这里插入图片描述
4:上面的打包处理不了html中引入的图片
解决方法:
npm i url-loader file-loader -D
npm i html-loader -D
在这里插入图片描述
5:打包其他的资源
安装 npm i file-loader -D
在这里插入图片描述
6:解决webpack重复打包的问题,当数据更新自动打包:
DevServer
配置:在webpack.config.js中配置

  devServer:{
        // contentBase: resolve(__dirname,'build'),
        compress:true,
        port:3000,
        open:true
        }

下载devServer的包
npm i webpack-dev-server -D
在这里插入图片描述
7:我们可以将不同的包,打包到不同的文件夹中

const {resolve}=require('path');
const  HtmlWebpackPlugin=require('html-webpack-plugin');
module.exports={
    entry:'./src/js/index.js',
    output:{
        filename:'js/built.js',
        path:resolve(__dirname,'build')
    },
    module:{
     rules:[
      
     ]
    },
    plugins:[
     new HtmlWebpackPlugin({
         template:'./src/index.html'
     })
    ],
    
    mode:'development',
    devServer:{
        // contentBase: resolve(__dirname,'build'),
        compress:true,
        port:3000,
        open:true
        }
}

在这里插入图片描述

js放到js文件夹下面,图片放到imgs中

8:开发环境下出现的问题:
A:css代码存在js中比较大,会造成闪屏,所以需要将css单独提取出来
生产环境下进行配置:

在这里插入图片描述

B:对代码进行压缩
设置代码压缩的插件optimize-css-assets-webpack-plugin
安装 npm optimize-css-assets-webpack-plugin

在这里插入图片描述

c:兼容性能的考虑
先在package.json中设置兼容的浏览器:
在这里插入图片描述
webpack.config.js下面进行配置:
在这里插入图片描述
在这里插入图片描述
d:js的eslint的检查
配置:

const {resolve}=require('path');
const  HtmlWebpackPlugin=require('html-webpack-plugin');
module.exports={
    entry:'./src/js/index.js',
    output:{
        filename:'js/built.js',
        path:resolve(__dirname,'build')
    },
    module:{
     rules:[
         {
           test:/\.js$/,
           exclude:/node_modules/,
           loader:'eslint-loader',
           //自动检查
           options:{
               fix:true
           }
         }
     ]
    },
    plugins:[
     new HtmlWebpackPlugin({
         template:'./src/index.html'
     })
    ],
    
    mode:'development',
    devServer:{
        // contentBase: resolve(__dirname,'build'),
        compress:true,
        port:3000,
        open:true
        }
}

下载资源:
npm i eslint-loader eslint eslint-config-airbnb-base eslint-plugin-import -D

在这里插入图片描述
packge.json中配置:

 "eslintConfig":{
    "extends":"airbnb-base",
    "rules": {
      "no-console": "off"
    }
  }

不需要进行eslint的检查设置如下面:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值