webpack核心概念之loader(带你一步步学webpack)

我们来讲下webpack第3个比较核心的观念loader。Loader,意为载入程序,装货。loder就是模块解析处理器。

说到webpack加载文件,就不得不顺便提一句,common.js规范中,认为每一个单独的文件都是一个模块。怎么说呢?就好比你一个main.css是一个模块,你具体的某个页面样式比如index.css也是一个模块。除了css以外,js文件也是一个模块,除此之外,ts也可以视作一个模块。

总结一句话就是,common.js认为每一个文件就是一个单独的模块。而每一个模块都有单独的作用域,在单独的作用域内,这个模块内定义的变量,不能被这个作用域以外的作用语所访问或读取。除非定义为全局对象的属性。

这个时候怎么办呢,我要怎么拿到这些单独模块聚合一起,然后再打包呢,就会有以下几个方式

早期的Common.js,adm,cdm的导入导出模块和es新增的导入导出模块功能。

更多关于导入导出模块详情点击这里.


我们回到正题,说道载入模块处理器loader。我们通过common.js导入进来任何文件以后是不是就可以直接解析和处理了呢。非也,非也。

我们的文件只导入进来没用,因为webpack呢,他只认识js,其他文件类型他不认识的啊。那么就要想法解析这些webpack不认识的文件,解析出webpack能理解的份上才行是吧。

这个时候就要用到loader模块处理器了。比如,css-loader就是把样式文件加载进来以后对其进行解析处理,我们叫做预处理文件。处理成可以直接引用的模块。

那怎么才能解析这些文件呢,现在我们用导入和解析css样式举例:

1,首先你要先安装进解析这些css的loader。常用的语句是:

npm install --save-dev css-loader

2,那安装完以后就可以了,不用管了是吧?打个比方,从网上买了折叠衣柜,他寄过来是散列开来的工具,这个时候你是不是买回来了以后要进行配置?把这些工具重新还原成该有的样子,才可以使用?同理,安装了css-loader以后呢,你要进行相应的配置才行,这样你安装回来的东西才不至于放在那里无法使用啊。

3,配置loader。

配置了相应规则,就可以自动化处理一切。无论如何这里有3种方式进行配置loader。

通过webpack.config.js文件配置。

通过内联。(import语句中显示指出loader)

通过CLI(在shell命令中指定他们)

然而呢,我在这里只介绍一个最常用最万金油的一个方式:通过webpack.config.js文件配置。

我们先上代码看看最常见的配置格式:

module.exports={

    "entry":'./src/a.js',

    output:{//output

        'path':path.resolve(__dirname,'dist'),//这个必须为绝对路径,但是最好用动态,因为有可能我们的文件路径会进行改动。所以这个时候可以用到node提供的path依赖

        filename:'bundle.js'

    },

    module:{

        rules:[

            {

                test: /\.(css|less)$/,   //注意这里css,less

                use: [

                    { loader: "style-loader" },//高级版本必须这样写

                    { loader: "css-loader" },

                    { loader: "less-loader" }

                  ],

                  type:"javascript/auto"

              },

        ]

    }


}


在webpack解析模块的同时,不同类型的模块需要使用不同类型的loader载入程序来处理不同模块,这部分的设置就在 module 配置中。所以Loader配置呢是其实包含在module配置中的。

那么module配置主要有俩个方面:module.noParse 和 module.rules。

我们这里值赘述module.rules跟loader配置相关的。可以将符合规则条件的文件模块交给对应的模块loader模块处理器来处理。

Module.rules是一个数组,数组里面的每一项都是一个对象类型。都在告诉怎么处理相对应的引进来的文件应用哪个loader模块处理器。

我们再次只介绍这个对象里面3个属性:test,use,type。

首先是test条件匹配:

利用正则表达式规则来条件匹配模块文件。,就是指出,符合这个test规则条件的文件,统统拿去给这个项里面对应的loader处理。

接下来是use指定使用哪些loader:

use呢是一个数组,每个数组元素可以是这个loader对应的字符串名称,也可以是一个对象用来映射loader处理器。不过在高版本的webpack配置中,字符串形式的已经被淘汰。目前只能用对象形式了。

最后一个是type:

webpack 5之后,就内置了资源模块(assets),意思是 webpack 可以自己处理静态资源文件。而在 webpack 5 之前都是需要安装 url-loader 、file-loader 去处理项目中的静态资源文件。若是 webpack 5安装使用了 url-loader,需要在 test 下增加一行 type: ‘javascript/auto’


好的,我们至此把loader核心大致讲完。具体不同模块部分关于webpack的loader使用,我们后面慢慢补充。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容