webpack 4.x一起学习(一)

271 阅读5分钟

最近在学习webpack第四个版本,相比大改版肯定有诸多不同,这边进行重新学习顺便排排BUG

安装过程中难免有点慢,但是npm是慢 cnpm又可能出错 npm install -g chajian --registry=http://registry.npm.taobao.org 推荐此方法安装 npm init -y 初始化 npm install -D webpack webpack-cli --registry=http://registry.npm.taobao.org 4版本要求安装webpack-cli 我们一步到位

安装好之后可以通过 webpack -v 查看版本号

创建webpack.config.js配置文件

大家可以根据我的目录进行测试webpack,也可以自行配置

index.js 注意js引入 此处是未生成的 待会我将要生成的js

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>webpack</title>
    </head>
    <body>
        <div id="title"></div>
        <script src="./../dist/bundle.js"></script>  =>引入我们即将通过webpack生成的js文件
    </body>
    </html>

entry.js写的简单一点 就一句代码

document.getElementById('title').innerHTML='Hello Webpack';

配置webpack.config.js 这个大家可能有点陌生 ,介绍一下基本配置

    module.exports={
        //入口文件的配置项
        entry:{},
        //出口文件的配置项
        output:{},
        //模块:例如解读CSS,图片如何转换,压缩
        module:{},
        //插件,用于生产模版和各项功能
        plugins:[],
        //配置webpack开发服务功能
        devServer:{}
    }

这里我用了3版本的配置 后续会跟进

来配置一下初步打包转换

entry选项(入口配置)

这个选项就是配置我们要压缩的文件一般是JavaScript文件(当然也可以是CSS…..)。这里要填写的是src目录下的entry.js文件。

output选项(出口配置)

出口配置是用来告诉webpack最后打包文件的地址和文件名称的,根据我们的配置应该打包到dist目录下

    module.exports={
        //入口文件的配置项
        entry:{
            //里面的entery是可以随便写的
            entry:'./src/entry.js'
        },
        //出口文件的配置项
        output:{
            //打包的路径文职
            path:path.resolve(__dirname,'dist'),
            //打包的文件名称
            filename:'bundle.js'
        },
        //模块:例如解读CSS,图片如何转换,压缩
        module:{},
        //插件,用于生产模版和各项功能
        plugins:[],
        //配置webpack开发服务功能
        devServer:{}
    }

webpack 打包的命令很简单 就是webpack 接下来我们来打包一下

很显然我们失败了 这里有个错误就是 path is not defined 我们这边需要引入一下path

   const path = require('path') =>在头部 引入path
   module.exports={
        //入口文件的配置项
        entry:{
            //里面的entery是可以随便写的
            entry:'./src/entry.js'
        },
        //出口文件的配置项
        output:{
            //打包的路径文职
            path:path.resolve(__dirname,'dist'),
            //打包的文件名称
            filename:'bundle.js'
                    },
        //模块:例如解读CSS,图片如何转换,压缩
        module:{},
        //插件,用于生产模版和各项功能
        plugins:[],
        //配置webpack开发服务功能
        devServer:{}
    }

好 我们再webpack一下 此时我们将会成功

dist目录下自动生成了bundle.js 文件 你可以打开看一下啊 根本看不懂 这是打包之后的文件,但是我们打开浏览器运行html的时候,里面会出现内容,就说明这个js是可以使用的

此时我们删掉生成的js 配置一下mode属性

   const path = require('path')
   module.exports={
        mode: 'development', =>默认配置是 ‘production(生产环境)’
        //入口文件的配置项
        entry:{
            //里面的entery是可以随便写的
            entry:'./src/entry.js'
        },
        //出口文件的配置项
        output:{
            //打包的路径文职
            path:path.resolve(__dirname,'dist'),
            //打包的文件名称
            filename:'bundle.js'
                    },
        //模块:例如解读CSS,图片如何转换,压缩
        module:{},
        //插件,用于生产模版和各项功能
        plugins:[],
        //配置webpack开发服务功能
        devServer:{}
    }

此时我们再webpack 一下 可以做个对比 有什么不同(此处不演示)

给大家介绍一下配置中的 _dirname

其实path.resolve(__dirname,’dist’)就是获取了项目的绝对路径 我给大家演示一下

在dist下新建dirname.js文件 代码如下

const path =require('path')
console.log(path.resolve(__dirname,'dist'))

然后我们在下面输入命令 cd dist 然后 node dirname.js

可以看到输出来的 是dist的路径

到这里就是webpack最基本的配置了,希望小伙伴多练练,不练也多看看

多入口、多出口配置

在src下新建一个js 内容随意 删除dist目录下的所有js

   const path = require('path')
   module.exports={
        mode: 'development',
        //入口文件的配置项
        entry:{
            //里面的entery是可以随便写的
            entry:'./src/entry.js',
             =>这里我们又引入了一个入口文件
            entry2:'./src/entry2.js'
        },
        //出口文件的配置项
        output:{
            //打包的路径文职
            path:path.resolve(__dirname,'dist'),
            //打包的文件名称
            filename:'[name].js'  =>注意此处 使用[name].js  表示打包出的文件名与进入名相同
                                          =>也就是即将打包出 entry.js 与entry2.js 在dist下
         },
        //模块:例如解读CSS,图片如何转换,压缩
        module:{},
        //插件,用于生产模版和各项功能
        plugins:[],
        //配置webpack开发服务功能
        devServer:{}
    }

改动一下index中的引入文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>webpack</title>
    </head>
    <body>
        <div id="title"></div>
        <script src="./entry.js"></script>  引入发生了改变
        <script src="./entry2.js"></script>

    </body>
    </html

接下来webpack打包一下

此时dist下已生成了js文件两个 说明我们成功了

如果你成功了 就已经入门咯