webpack 基础知识备忘录

第一章 初识 webpack

1.引言

  1. 使用webpack 进行工程化开发

    • 本地全局安装webpack

      npm install webpack@4 -g
      npm install webpack-cli@3 -g
    • 在项目中安装webpack

      1. 初始化包描述文件

        npm init -y
      2. 安装webpack和webpack-cli开发依赖

        npm install webpack@4 -D
        npm install webpack-cli@3 -D

2.打包js文件

  1. 所有需要执行的文件,应该在入口文件中引入。

    main.js

    import './asset/js/example.js';
  2. 配置文件webpack.config.js

    注意:配置文件中模块导入导出只能使用CommonJS语法规范。

    核心概念(基础结构):

    入口(entry):整个项目必须指定一个打包的入口文件。

    出口(output):项目打包后输出的目录。

    loader(加载器) :用来识别各种文件。

    插件(plugin)

    模式(mode):采用什么方式打包。有两种方式:开发模式(development),生产模式(production)。开发模式代码不压缩,生产模式代码压缩。用户最终见到的是production。

    //引入path模块(nodeJS 内置模块,用于处理路径)
    const PATH = require('path');
    ​
    module.exports = {
        entry:'./src/main.js',
        output:{
            //打包后的文件名
            filename:'app.js',
            //打包文件的输出路径,__dirname 全局变量返回的是 当前项目的绝对路径。 dist 是打包后文件保存的目录。
            path:PATH.resolve(__dirname,'dist'),
        },
        mode:'development'
    }
    #打包命令
    webpack

3.打包css文件

  1. 入口文件引入

    main.js

    import './asset/css/example.css';
  2. 添加loader开发依赖

    css-loaderstyle-loader

    npm install css-loader@3.4.2 -D
    npm install style-loader@1.1.3 -D
  3. 配置文件

    webpack.config.js

    webpack默认只能处理js文件和json文件,如果要处理其他文件,需要引入对应的加载器(loader)。

    //...
    ​
    ​
    module.exports = {
        //...
        //loaders。通过module选项,配置加载器。
        module:{
            //在rules选项中,配置具体的加载器,该选项是一个数组(对象数组)。
            rules:[
                //每个对象处理一种文件
                {
                    //指定文件的格式,使用正则表达式(RegExp)进行匹配。
                    test:/\.css$/,
                    //处理该文件使用到的loader
                    //注意:loader的加载顺序是从右向左。所有一定要先识别css文件再解析文件中的编码格式。
                    
                    use:[
                        //style-loader 将js中的css代码,以style标签的方式嵌入到网页中。
                        {loader:'style-loader'},
                        //css-loader将css文件以模块化方式导入到js中
                        {loader:'css-loader'}
                    ]
                },
               
            ]
        }
        //...
    }

4.打包生成html文件

  1. 添加插件(plugin)开发依赖

    html-webpack-plugin

    npm install html-webpack-plugin@3.2.0 -D
  2. 配置文件

    webpack.config.js

    //...
    //引入生成html页面的插件
    const HTML_WEBPACK_PLUGIN = require('html-webpack-plugin');
    ​
    module.exports = {
        //...
        plugins:[
            //可以指定一个html文件,作为模板,用来创建打包后功能预览页面。
            new HTML_WEBPACK_PLUGIN({template:'./public/index.html'}),
        ]
        //...
    }

5.打包图片文件

  1. 入口文件引入

    main.js

    //...
    import example from './asset/img/example.jpg';
    ​
    let img = document.createElement('img');
    img.src = example;
    let app = document.getElementById('app');
    app.appendChild(img);
    //...

    模版页面index.html

    <!--...--->
        <div id="app"></div>
    <!--...--->
  2. 添加loader开发依赖

    file-loader

    npm install file-loader@5.0.2 -D
  3. 配置文件

    webpack.config.js

    //...
    module.exports = {
        //...
        module:{
            rules:[
                {
                    test:/\.(png|jpg|gif)$/,
                    use:['file-loader']
                }
            ]
        }
        //...
    }
  4. 优化

  • 添加loader开发依赖

    url-loader

    npm install url-loader@3.0.0 -D
  • 重写配置中处理图片文件的rule

    webpack.config.js

    //...
    module.exports = {
        //...
        module:{
            rules:[
                {
                    test:/\.(png|jpg|gif)$/,
                    use:[
                        {
                            loader:'url-loader',
                            options:{
                                //指定打包后文件名称,与文件存储路径(自动创建文件夹)。[name]原名,[ext]原格式,[hash:8]8位哈希码(避免重命名)。
                                name:'img/[name][hash:8].[ext]'
                                //超过指定大小的图片参与打包,否则转为base64编码:单位是字节。
                                limit:1024*4, //超过4kb图片参与打包。
                                //#url-loader默认采用ES6模块语法规则,
                                //#html-loader采用CommonJS模块语法规则。
                                //#为了让html模板中直接引入的图片可以正常显示,需要关闭ES6模块语法规则,统一采用CommonJS模块语法规则
                                
                                esModule:false;
                            }
                        }
                    ]
                }
            ]
        }
        //...
    }
  • 解决模板中图片路径问题。

    • 模板页面index.html

      <!---->
          <img src="../src/asset/img/example.jpg">
      <!---->
    • 添加loader开发依赖

      html-loader

      npm install html-loader@0.5.5 -D
    • 配置文件

      webpack.config.js

      //...
      module.exports = {
          //...
          module:{
              rules:[
                  //...
                  //处理html文件中 图片资源
                  {
                      test:/\.html$/,
                      use:['html-loader']
                  },
              ]
          }
          //...
      }

6.将样式从打包后的js中剥离到独立的css文件

  1. 添加插件(plugin)开发依赖

    mini-css-extract-plugin (插件地址)

    npm install mini-css-extract-plugin@0.9.0 -D
  2. 配置文件

    webpack.config.js

    //...
    const MINI_CSS_EXTRACT_PLUGIN = require('mini-css-extract-plugin');
    ​
    module.exports = {
        //...
        plugins:[
            //...
            new MINI_CSS_EXTRACT_PLUGIN({
                //指定文件名称,与文件存储路径(自动创建文件夹)
                filename:'css/app.css'
            }),
        ],
        //loaders,
        module:{
            //重写配置中处理css文件的rule
            rules:[
                //...
                {
                    test:/\.css$/,
                    //使用插件中的loader,替换style-loader
                    use:[
                    {
                        loader:MINI_CSS_EXTRACT_PLUGIN.loader,
                        options:{
                            //#设置css文件中的引用路径,应与打包后引用的文件路径匹配。
                            publicPath:'../'
                        }
                    },'css-loader']
                }
            ]
        }
        //...
    }

第二章 webpack与Vue的工程化开发

1.使用webpack-dev-server调试

正常的开发流程应该是项目开发完毕后打包,在开发阶段应该使用webpack-dev-server调试。

  1. 安装webpack-dev-server开发依赖

    npm install webpack-dev-server@3.10.3 -D
  2. 配置文件

    webpack.config.js

    //...
    module.exports = {
        //...
        //配置 webpack-dev-server
        devServer: {
        //端口号
        port: 8848,
        //开启 自动运行调试页面
        open:true,
      },
    }
  3. 运行 调试server (webpack-dev-server)

    npx webpack-dev-server
  4. 设置简化的调试命令

    package.json中配置

    //...json中正常不允许写注释
        "scripts":{
            "serve":"npx webpack-dev-server"
        }
    //...

    使用方法:npm run

    npm run serve

2.vue的render函数(铺垫)

  1. render函数渲染模板(template)。

  2. render函数把容器当做模板渲染(el‘s outerHTML as template)。

  3. 手动调用render函数进行渲染。

    //...
        render(h){
            //******************请省略以下注释**********************//
            //#h函数根据 参数 返回虚拟DOM(节点描述信息树)
            //#h函数    参数1:/*HTML标签名|组件选项对象|resolve返回值为前两者的异步函数*/             
            //#        参数2(可选):与模板中属性(attribute)对应的数据对象(详见链接)       
            //#        参数3(可选):节点内容,(1)字符串(2)子节点数组['字符串节点',h('span','h函数创建子节点'),h(MyComponent,{}/*h函数引用组件创建子节点*/)]
            //*****************************************************//
            return h('div'/*标签名*/,this.name+'---'+this.age/*标签内容*/);
        },
        data(){
            return {
                name:'lisi',
                age:20
            }
        }
    //...

    深入h函数

3.引入VUE

  1. 安装vue生产依赖

    npm install vue@2.6.12 -S
  2. 导入VUE

    main.js

    //#注意:在工程化的环境中,引入的vue,默认是没有处理模板的功能,需要手动调用render函数,创建虚拟DOM,并展示到页面
    import Vue from 'vue';

    node_modules-----vue(依赖包)-----package.json

        //...json文件正常不能写注释
        //模块引入的不是完整的vue所以不能渲染模板页面中的容器
    ​
        "module":"dist/vue.runtime.esm.js"
    ​
        //考虑到模板解析功能占用体积较大,且可以被替换,所以在工程化开发时去除了该功能。
       //...

    综上:所以在工程化开发时需要手动调用render函数进行渲染。(同第2小节第3段)

4.webpack与vue单文件组件开发

1.webpack打包vue文件

  1. 添加loader开发依赖

    vue-loader

    npm install vue-loader@15.9.6 -D
    npm install vue-template-compiler@2.6.12 -D

    配置文件

    webpack.config.js

    //...
    //引入vue-loader,解构出插件
    const {VueLoaderPlugin:VUE_LOADER_PLUGIN} = require('vue-loader');
    ​
    module.exports = {
        //...
        //loaders
        module:{
            rules:[
                //...
                //处理vue文件
                {
                    test:/\.vue$/,
                    loader:'vue-loader'
                }
                //...
            ]
        }
        plugins:[
            //...
            new VUE_LOADER_PLUGIN(),
        ]
        //...
    }
  2. main.js(入口js文件)

    //导入入口组件
    import App from './App.vue';
    //...
    //渲染组件
    render(h){
        return h(App);
    },
    //
  3. 导入路径正确依然报错。

    解决方法:配置路径别名

    O`__E_3_HZ_2SI4_7UNDJ69.png

    webpack.config.js

    //...
    //引入path模块。nodeJS的内置模块,用于处理路径。
    //前文已引入的模块,此后将不再强调
    const PATH = require('path');
    ​
    module.exports = {
        //...
        //解析
        resolve:{
            //别名
            alias:{
                //_dirname 全局变量返回的当前项目的目录
                "@c":PATH.resolve(__dirname,"src/components"),
            }
        }
        //...
    }

  4. App.vue(根组件)

    <template>
        <div>
            <Home></Home>
        </div>
    </template>
    <script>
        //import Home from './components/Home.vue';
        import Home from '@c/Home.vue';
        
        export default {
            //
            components:{
                Home
            }
        }
    </script>
    <style>
        
    </style>

    Home.vue(略)

    other components etc...

5.webpack 与vue组件Element UI 的使用

  1. 安装第三方组件库 Element UI 生产依赖

    npm install element-ui@2.15.1 -S
  2. 引入组件

    main.js

    //...
    import ElementUI from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css';
    ​
    //使用ElementUI插件
    Vue.use(ElementUI);
    //...

    api:Vue.use

  3. 组件中使用到了字体文件,添加配置,处理字体文件

    配置文件

    webpack.config.js

    //...
    module.exports = {
        //...
        //loaders
        module:{
            rules:[
                //...
                //处理字体文件
                {
                    test:/\.(ttf|woff)$/,
                    loader:'file-loader'
                }
                //...
            ]
        }
        //...
    }

  4. 组件的使用(以表格组件为例)

    main.vue

    全文复制

6.Tips

  1. 目录结构

  2. vue项目设计文档

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值