webpack Loader 相关配置

2021-07-15  本文已影响0人  弹力盒

1、package.json 文件配置

{
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ]
}

2、postcss.config.js 文件配置

// 需要本地安装 autoprefixer 依赖
module.exports = {
  plugins:{
   "autoprefixer": {}
  }
}

3、.babelrc 文件配置

// .babelrc 文件的执行顺序是从下到上
{
  "presets": [
    ["@babel/preset-env", {
      /**
       * 按需引用,没被引用的第三方模块代码不会被打包
       * 使用 "useBuiltIns": "usage" 时,会自动引入 @babel/polyfill
       * 入口文件(main.js)中无需再次引入 @babel/polyfill 文件
       */
      "useBuiltIns": "usage",
      // 执行一个 corejs 的值,需要安装 core-js@2 也可以选择使用 3 的
      "corejs": 2
    }]
  ]
}

4、识别 css 文件

{
  test: /\.css$/,
  use: [
    /**
     * style-loader 将处理完的 css 代码
     * 放在 style 标签上挂载到 body 标签中
     */
    {
      loader: 'style-loader'
    },
    {
      loader: 'css-loader',
    },
    /**
     * postcss-loader
     * 用于添加 css3 的浏览器前缀
     * 需要在根目录下创建一个 postcss.config.js 的配置文件来支持
     * postcss-loader 被使用的就会去执行 postcss.config.js 配置文件
     * package.json 文件需要添加 browserslist 配置项
     */
    {
      loader: 'postcss-loader'
    }
  ]
}

5、识别 scss 文件,node-sass 的版本不能采用最新的,本次采用 4.14.1 的

{
  test: /\.scss$/,
  use: [
    /**
     * style-loader 将处理完的 css 代码
     * 放在 style 标签上挂载到 body 标签中
     * loader 的执行顺序是从下到上的
     */
    {
      loader: 'style-loader'
    },
    {
      loader: 'css-loader',
      options: {
        /**
         * 表示每次引入 scss 文件时都要先通过以下两个 loader 处理
         * 避免嵌套引入 scss 文件时造成的错误
         */
        importLoaders: 2,
        modules: true // 开启模块化,防止不同模块的样式冲突
      }
    },
    /**
     * postcss-loader
     * 用于添加 css3 的浏览器前缀
     * 需要在根目录下创建一个 postcss.config.js 的配置文件来支持
     * postcss-loader 被使用的就会去执行 postcss.config.js 配置文件
     * package.json 文件需要添加 browserslist 配置项
     */
    'postcss-loader',
    'sass-loader'
  ]
}

6、识别 less 文件

{
  test: /\.less$/,
  use: [
    /**
     * style-loader 将处理完的 css 代码
     * 放在 style 标签上挂载到 body 标签中
     * loader 的执行顺序是从下到上的
     */
    'style-loader',
    {
      loader: 'css-loader',
      options: {
        /**
         * 表示每次引入 scss 文件时都要先通过以下两个 loader 处理
         * 避免嵌套引入 scss 文件时造成的错误
         */
        importLoaders: 2,
        // modules: true // 开启模块化,防止不同模块的样式冲突
      }
    },
    /**
     * postcss-loader
     * 用于添加 css3 的浏览器前缀
     * 需要在根目录下创建一个 postcss.config.js 的配置文件来支持
     * postcss-loader 被使用的就会去执行 postcss.config.js 配置文件
     * package.json 文件需要添加 browserslist 配置项
     */
    'postcss-loader',
    'less-loader'
  ]
}

7、识别字体图标文件

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

8、识别图片等文件

/**
 * url-loader 与 file-loader 相比,
 * 还可以将图片文件打包成 base64 的形式引用,
 * 减少了加载 js 文件时的 http 请求个数,
 * 但不建议将大文件图片也打包成 base64 形式,
 * 因为这样会造成请求的 js 文件过大,首次加载白屏时间过长,
 * 最佳实现即做一个限制值来判断究竟该打包成什么格式
 */
{
  test: /\.(jpg|jpeg|png|gif|txt)$/,
  use: {
    loader: 'url-loader', // 用于处理各种webpack不识别的文件
    options: {
      name: '[name]-[hash].[ext]', // 配置打包后的名称
      outputPath: 'images/', // 配置打包后的具体位置,
      limit: 2048 // 2kb,配置小于 limit 大小的图片文件将以 base64 的形式打包
    }
  }
}

9、统一识别 css/less/sass 文件

{
  test: /\.(c|le|sc)ss$/,
  use: [
    'style-loader',
    'css-loader',
    'postcss-loader',
    'sass-loader',
    'less-loader'
  ]
}

10、识别 js 文件

/**
 * 需要安装三个依赖
 * npm install --save-dev babel-loader @babel/core
 * npm install @babel/preset-env --save-dev
 * 以及配置根目录下的 .babelrc 文件,文件内容如开头所示
 * 将 js 代码转为 Es5 代码,方便各种浏览器识别
 * babel-loader 只是翻译当前的 js 代码,但像 Promise 等对象在
 * 低版本的浏览器上是没有的,所以需要 @babel/polyfill 来添加
 * @babel/polyfill 安装 npm install --save @babel/polyfill
 * 安装完后只需要在入口文件(如 main.js)引用即可 import @babel/polyfill
 */
{
  test: /\.js$/,
  exclude: /node_modules/,
  loader: "babel-loader"
}
上一篇 下一篇

猜你喜欢

热点阅读