webpack个人理解(新手)


typora-copy-images-to: pic

webpack

1.webpack定义

##2.webpack的安装与初级配置

  • npm init -y初始化形成json文件

  • npm install webpack webpack-cli --save-dev安装本地的而非全局方便更新

  • 打包默认entry入口文件 src/index.js,默认output出口 dist/main.js

    打包模式webpack --mode development 开发阶段模式,webpack --mode production 生产阶段(压缩)

  • 更改json文件里的javascript配置

  • 1550710064929

  • npm run dev 或者npm run build进行打包操作

3.webpack核心配置config文件

  • 新建一个webpack.config.js文件

  • 配置入口entry(所需打包的文件路径)

  • 配置出口output

    1.path指定文件打包的存放路径

    2.path.resolve()方法将路径或路径片段的序列处理成绝对路径

    3.__dirname表示当前文件所在的目录的绝对路径

    4.filename是打包后文件的名称

const path = require('path');

module.exports = {
    entry: './public/index.js',
    output: {
        path: path.resolve(__dirname,'build'),
        filename: 'bundle.js'
    }
}

当存在webpack.config.js优先执行此处的配置

4.入口entry和出口output的进阶用法

一、入口entry

(1)单入口:

单文件 例如:

 entry: './src/index.js'

多文件 在你想要多个依赖文件一起注入,并且将它们的依赖导向到一个“chunk(打包后的文件)"时,传入数组的方式就很有用。

例如:

entry: ['./src/index.js','./src/index2.js',..........]

(2)多入口:

例如:

entry:{
	pageOne: './src/pageOne/index.js',
	pageTwo: './src/pageTwo/index.js'
	pageThree: './src/pageThree/index.js
}

二、出口output

(1)单出口

output:{
    path: path.resolve(__dirname,'dist'),
	filename:'bundle.js'
}

(2)多出口

output:{
    path: path.resolve(__dirname,'dist'),
    filename:'[name].js'
}

多入口要和多出口配合使用

5.开发调试配置本地服务器webpack-dev-server

1.了解webpack-dev-server

  • webpack-dev-server是用来配置本地服务器的,使用它可以为webpack打包生成的资源文件提供web服务。

  • webpack-dev-server主要提供两个功能:

    (1) 为静态文件提供web服务

    (2)自动刷新和热替换(HMR)

2.安装webpack-dev-server

npm install --save-dev webpack-dev-server

3.配置webpack.config.js文件

devServer:{
    contentBase:'./build',//设置服务器访问的基本目录
    host:'localhost',//服务器的ip地址
    port:8080,//端口
    open:true//自动打开页面
}

4.配置package.json

”scripts":{

​ “start”: “webpack-dev-server --mode development”

}

6.webpack加载css所需loader及其使用方式(style-loader和css-loader)

1.安装loader

安装style-loader和css-loader

npm install style-loader css-loader --save-dev

2.配置loader

  • 在webpack.config.js文件里配置module中的rules

    在webpack的配置中loader有两个目标

    (1).test属性,用于标识出应该被对应的loader进行转换的某个或某些文件

    (2).use属性,表示进行转换时,应该使用哪个loader

module:{
    rules:[
        {
            test:/\.css$/,
            use:['style-loader','css-loader']//引用顺序不可更改
        }
    ]
}

7.编译es6

babel转化语法所需依赖项:

babel-loader: 负责 es6 语法转化

babel-core: babel核心包

babel-preset-env:告诉babel使用哪种转码规则进行文件处理

1.安装依赖

npm install babel-loader @babel/core @babel/preset-env --save-dev

2.配置config文件

exclude表示不在指定目录查找相关文件

module:{
    test:/\.js$/,
    exclude:/node_modules/,
    use:'babel-loader'
}

3.新建.babelrc文件配置转换规则

{
    "presets":["@babel/preset-env"]
}

4.另一种规则配置

use:{
    loader: 'babel-loader',
    options:{
        presets:['@babel/preset-env']
    }
}

此处use即是上面得use:‘babel-loader’

8.生成HTML(html-webpack-plugin)

1.了解html-webpack-plugin

HtmlWebpackPlugin会自动为你生成一个HTML文件,根据指定的index.html模板生成对应的 html 文件。

1550754418029

根据src下的index.html自动在打包后的目录下生成html文件,相关引用关系和文件路径都会按照正确的配置被添加进生成的html里

2.安装依赖

npm install html-webpack-plugin --save-dev

3.配置config文件

const HtmlWebpackPlugin = require('html-webpack-plugin')
plugin:[
    new HtmlWebpackPlugin({
        template:"./src/index.html",//模板文件路径
        filename:'webpack.html',//生成文件得名称
        minfy:{
            minmize:true,//是否打包为最小值
            removeAttributeQuotes:true, //去除引号
            removeComments:true,//去除注释
            collapswWhitespace:true,//去除空格
            minfyCSS:true,//压缩html内的样式
            minfyJS:true,//压缩html内的js
            removeEmptyElements:true,//清理内容为空的元素
        },
        hash:true//引入产出资源阿时候加上哈希避免缓存
    }
    )
]

9.提取分离css

1.处理效果

将所有的入口chunk(entry chunks)种引用的css,移动到独立分离的css文件

1550795775648

2.ExtractTextPlugin插件(旧版插件)

  • 安装(下载)

    npm install --save-dev extract-text-webpack-plugin@next
    
  • 配置config文件

    引入插件

    const ExtractTextPlugin = require("extract-text-webpack-plugin")
    
  • Rules设置

    fallback:编译后用什么loader来提取css文件

module:{
    rules:[
        {
            test:/\.css$/,
            use:ExtractTextPlugin.extract({
                fallback:"style-loader",
                use:"css-loader"
            })
        }
    ]
}
  • Plugins设置

    plugins:[
        new ExtractTextPlugin("./css/[name].css"),//也可以打包在一个文件内
    ]
    

3.mini-css-extract-plugin插件(新版插件)

  • 安装

    npm install --save-dev mini-css-extract-plugin
    
  • 配置config文件

    • 引入插件
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    
    • Rules设置
    module:{
        rules:[
            {
                test:'/\.css$/,
                use:[MiniCssExtractPlugin.loader,'css-loader']
            }
        ]
    }
    
    • Plugin设置
    plugins:[
        new MiniCssExtractPlugin({
            filename:"./css/[name].css"
        })
    ]
    

11.文件处理

1.图片处理

  • 安装loader

    npm install --save-dev file-loader
    
  • 配置config文件

    module:{
        rules:[
            {
                test:/\.(png|jpg|gif|jpeg)$/,
                use:'file-loader'
            }
        ]
    }
    
  • 选项配置

    test:/\.(png\jpg\gif)$/,
    use:[
        {
            loader: 'file-loader',
            options:{}
        }
    ]
    

    配置options:

    name: 为你的文件配置自定义文件名模板(默认值hash.ext)

    context:配置自定义文件的上下文,默认为webpack.config.js

    publicPath:为你的文件配置自定义public发布目录

    outputPath:为你的文件配置自定义output输出目录

2.字体文件处理

  • 下载字体文件

    以bootstrap字体文件为例子

    Boostrap字体文件下载地址:https://v3.bootcss.com/getting-started/

  • 配置config文件

    rules:[
        {
            test:/\.css$/,
            use:['style-loader','css-loader']
        },
        {
            test:/\.(ttf|woff|woff2|eot|svg)$/,
            use:[{
                loader:'file-loader',
                options:{
                    outputPath:'font/'
                }
            }]
        }
    ]
    

3.第三方js库处理

以jquery库为例子

  • 本地导入

    编写配置文件:

    webpack.ProvidePlugin参数是键值对形式,键就是我们项目中使用的变量名,值就是键所指向的库。webpack.ProvidePlugin会先从npm安装的包中查找是否有符合的库。

    如果webpack配置了resolve.alias选项(理解成“别名”),那么webpack.ProvidePlugin就会顺着设置的路径一直找下去。

    使用webpack.ProvidePlugin前需要引入webpack

    const webpack = require("webpack");
    
    resolve:{
        alias:{
            jQuery:path.resolve(__dirname,"public/js/aa.js")
        }
    },
        plugins:[
            new web    pack.ProvidePlugin({
                jQuery:"jQuery"
            })
        ]
    
  • npm安装模块

    安装Jquery库:

    npm install jquery --save-dev
    

    直接在js里import引入

    import $ from 'jquery'
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值