webpack 之loader 常用总结

1、介绍

Webpack 本身只能处理 JavaScript 模块,如果要处理其他类型的文件,就需要使用 loader 进行转换。loader 可以使你在 import 或"加载"模块时预处理文件。

2、css-loader 和 style-loader 

当我们在直接在JavaScript 模块中 import CSS文件的时候,webpack会提示报错。找不到XX模块。

安装
npm i css-loader style-loader -D

webpack.config.js配置则增加
module: {
    rules: [
      //配置css文件打包。
      //注意loader引入顺序,是从右向左引入然后解析的。
      //如:css-loader先打包css文件,然后style-loader作用是把css文件引入到html里面
      { test: /.css$/, use: ['style-loader', 'css-loader'] },
    ]
  }

3、less-loader和sass-loader

通常都会采用less或者sass这样的预处理器,能够加快开发效率

安装
npm i less less-loader -D
npm i node-sass sass-loader -D

配置:less-loader先处理less文件,然后交给css-loader,style-loader顺序处理。
 module: {
    rules: [
      //配置css文件打包。
      //注意loader引入顺序,是从右向左引入然后解析的。
      //如:css-loader先打包css文件,然后style-loader作用是把css文件引入到html里面
      { test: /.css$/, use: ['style-loader', 'css-loader'] },
      { test: /.less$/, use: ['style-loader', 'css-loader' ,'less-loader'] },
       // 或sass
       // { test: /.scss$/, use: ['style-loader', 'css-loader' ,'sass-loader'] },
    ]
  }

4、file-loader和url-loader

我们在项目中肯定需要打包一些图片资源,当然还有一些字体图标资源。这个时候我们就需要安装file-loader和url-loader了。

其中,url-loader是依赖file-loader的。

如:

body{
  div{
    color: red;
    background-image: url('../images/logo.png')
  }
}

npm i file-loader url-loader -D

增加
{ test: /.(png|jpeg|jpg|gif)$/, use: ['url-loader'] },

则
打包出来的图片变成了base64格式。


我们继续补充webpack.config.js 有关loader配置内容:
{
        test: /.(png|jpg|gif|svg)$/,
        use: [{
          loader: 'url-loader',
          options: {
            //配置的name项。指的是打包图片资源到指定的images目录下。
            //配置的limit项。指的是当图片资源大于5kb的时候,就不用转为base64格式了
            name: './images/[name].[ext]',
            limit: 5 * 1024
          }
        }],
      },

当我们执行 npm run build。

我们就可以在dist目录下看到,我们打包后的图片资源
当然,为了避免图片重名的情况,我们可以给文件名称加上哈希值。

[hash:4]指的是加上四位的hash值。你们可以随意加。
name: './images/[name][hash:4].[ext]',

如
backgroundImgfrfr.png

4、ts-loader、babel-loader、eslint-loader、vue-loader等

5、Babel

babel 是一个javascript编辑器。可以看下bable官网介绍:https://www.babeljs.cn/。

我们如今在项目中往往都会使用ES6语法,如:箭头函数,class声明等等,但是低版本的浏览器并不兼容。我们使用webpack打包的时候,webpack也不能帮助我们直接做兼容转化,此时,我们就需要安装Babel-loader,帮助我们。

开始安装:bable-loader ; babel-core(babel核心包);babel-preset-env(babel预设);

npm install babel-loader babel-core babel-preset-env

安装完毕后,我们开始配置;推荐配置是,首先我们在项目中新建一个.babelrc文件。文件里面的内容是一个Json对象。
  1. {
  2. "presets": ["@babel/preset-env"]
 
}
  然后我们在webpack.config.js里面配置使用的loader;

{
test: /.js$/,
use: ['babel-loader'],
//exclude:不需要对node_modules目录下的文件进行处理。
exclude: /(node_modules)/,
}

(vue等通过 cli搭建项目后,均已配置完成)

当我们执行,npm run build后,查看原来编写的js文件的时候,我们就会发现。箭头函数等高级语法写的语句,就已经改变成具有兼容性的写法了。

6、@babel/polyfill

Babel包含一个polyfill,您可以使用新的内置函数,如Promise或WeakMap,静态方法,如Array.from或Object。赋值,实例方法,比如Array.prototype。包含和生成器函数(如果使用regenerator插件)。为了做到这一点,polyfill添加了全局范围和原生原型,比如String。

比如新的语法

var str = '123'

str.includes('2');

想includes这样新的方法,webpack也不能直接帮我们做兼容性语法处理的。

此时我们就需要安装:
npm install --save @babel/polyfill

然后进行引入就可以了。

引入的方法有几种:

例如:
module.exports = {
  entry: ["@babel/polyfill", "./src/main.js"],
};

参考

https://blog.csdn.net/qq_29557739/article/details/92972544

https://blog.csdn.net/qq_29557739/article/details/93461411

https://blog.csdn.net/qq_29557739/article/details/96430467?spm=1001.2014.3001.5501

原文地址:https://www.cnblogs.com/-roc/p/14451130.html