Webpack的应用

处理css文件

总共有src目录下的index.css和index.js、同根的index.html和webpack.config.js文件,然后npm init之后生成package.json文件,npm install后生成package-lock.json文件,最后npm run webpack之后有dist目录下各种文件

index.js

import './index.css';

index.css

body {
  background-color: red;
}

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>处理 CSS 文件</title>
  </head>
  <body></body>
</html>

webpack.config.js

entry默认是main 

html-webpack-plugin插件是为了方便以什么为模板然后生成文件并且引入对应的js和css文件 

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js'
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        // loader: 'css-loader'
        // use: ['style-loader', 'css-loader']
        use: [MiniCssExtractPlugin.loader, 'css-loader']
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './index.html',
      filename: 'index.html'
    }),
    new MiniCssExtractPlugin({
      filename: 'css/[name].css'
    })
  ]
};

在没有配置css-loader时,npm run webpack出现以下情况

配置好css-loader之后,npm run webpack就成功通过了

 

有css-loader还不够,还需要安装style-loader,最后网页才能呈现样式

注意:上面图webpack.config.js中use后面可以是对象也可以是数组执行顺序从右往左

但是呢,我们通常都是link导入样式表文件,而不是直接style,因此我们需要安装插件mini-css-extract-plugin,之后配置插件filename指定哪个目录下(在上面output属性目录前提下)

注意:安装开发依赖npm install --save-dev 插件名字@版本号

package.json 

{
  "name": "webpack-css",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "webpack": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^4.1.1",
    "html-webpack-plugin": "^4.3.0",
    "mini-css-extract-plugin": "^0.9.0",
    "style-loader": "^1.2.1",
    "webpack": "^4.44.1",
    "webpack-cli": "^3.3.12"
  }
}

npm run webpack后生成dist目录下有index.html、main.js和css目录下的main.css文件

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>处理 CSS 文件</title>
  <link href="css/main.css" rel="stylesheet"></head>
  <body><script src="main.js"></script></body>
</html>

 

使用file-loader处理CSS图片中的图片

 总共有src目录下的index.css和index.js、同根的index.html和webpack.config.js文件、src目录下的img目录下logo.png,然后npm init之后生成package.json文件,npm install后生成package-lock.json文件,最后npm run webpack之后有dist目录下各种文件

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>使用 file-loader 处理 CSS 文件中的图片</title>
  </head>
  <body>
    <script>
      // npm install

      // 如果是外部的资源,是不需要考虑 webpack 的,只有本地的图片才需要被 webpack 处理

      // file-loader
      // npm install --save-dev file-loader@6.0.0
    </script>
  </body>
</html>

index.css

body {
  /* background-image: url(https://www.imooc.com/static/img/index/logo.png); */
  background-image: url(img/logo.png);
  background-repeat: no-repeat;
}

index.js

import './index.css';

console.log('index');

package.json

{
  "name": "webpack-css-img",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "webpack": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^4.1.1",
    "file-loader": "^6.0.0",
    "html-webpack-plugin": "^4.3.0",
    "mini-css-extract-plugin": "^0.9.0",
    "style-loader": "^1.2.1",
    "webpack": "^4.44.1",
    "webpack-cli": "^3.3.12"
  }
}

webpack.config.js(注意比上次文件增加的内容)

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js'
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
            options: {
              publicPath: '../'
            }
          },
          'css-loader'
        ]
      },
      {
        test: /\.(jpg|png|gif)$/,
        use: {
          loader: 'file-loader',
          options: {
            name: 'img/[name].[ext]'
          }
        }
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './index.html',
      filename: 'index.html'
    }),
    new MiniCssExtractPlugin({
      filename: 'css/[name].css'
    })
  ]
};

继npm install和npm run webpack之后生成以下这样目录

 

dist目录下的index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>使用 file-loader 处理 CSS 文件中的图片</title>
  <link href="css/main.css" rel="stylesheet"></head>
  <body>
    <script>
      // npm install

      // 如果是外部的资源,是不需要考虑 webpack 的,只有本地的图片才需要被 webpack 处理

      // file-loader
      // npm install --save-dev file-loader@6.0.0
    </script>
  <script src="main.js"></script></body>
</html>

main.css 

body {
  /* background-image: url(https://www.imooc.com/static/img/index/logo.png); */
  background-image: url(../img/logo.png);
  background-repeat: no-repeat;
}

 

使用html-withimg-loader处理HTML中的图片

总共有src目录下的index.css和index.js、同根的index.html和webpack.config.js文件、src目录下的img目录下logo.png,然后npm init之后生成package.json文件,npm install后生成package-lock.json文件,最后npm run webpack之后有dist目录下各种文件

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>使用 html-withimg-loader 处理 HTML 中的图片</title>
  </head>
  <body>
    <img src="./src/img/logo.png" alt="" />

    <script>
      // npm install --save-dev html-withimg-loader@0.1.16
    </script>
  </body>
</html>

index.css

body {
  background-color: yellow;
  /* background-image: url(); */
}

index.js

import './index.css';

console.log('index');

package.json

{
  "name": "webpack-html-img",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "webpack": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^4.1.1",
    "file-loader": "^6.0.0",
    "html-webpack-plugin": "^4.3.0",
    "html-withimg-loader": "^0.1.16",
    "mini-css-extract-plugin": "^0.9.0",
    "style-loader": "^1.2.1",
    "webpack": "^4.44.1",
    "webpack-cli": "^3.3.12"
  }
}

webpack.config.js(注意比上次文件增加的内容)

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js'
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
            options: {
              publicPath: '../'
            }
          },
          'css-loader'
        ]
      },
      {
        test: /\.(jpg|png|gif)$/,
        use: {
          loader: 'file-loader',
          options: {
            name: 'img/[name].[ext]',
            esModule: false
          }
        }
      },
      {
        test: /\.(htm|html)$/,
        loader: 'html-withimg-loader'
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './index.html',
      filename: 'index.html'
    }),
    new MiniCssExtractPlugin({
      filename: 'css/[name].css'
    })
  ]
};

继npm install和npm run webpack之后生成以下这样目录 

 

dist目录下的index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>使用 html-withimg-loader 处理 HTML 中的图片</title>
    <link href="css/main.css" rel="stylesheet">
</head>
<body><img src="img/logo.png" alt=""/>
<script>      // npm install --save-dev html-withimg-loader@0.1.16    </script>
<script src="main.js"></script>
</body>
</html>

 

使用file-loader处理js中的图片

总共有src目录下的index.css和index.js、同根的index.html和webpack.config.js文件、src目录下的img目录下logo.png,然后npm init之后生成package.json文件,npm install后生成package-lock.json文件,最后npm run webpack之后有dist目录下各种文件

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>使用 file-loader 处理 JS 中的图片</title>
  </head>
  <body>
    <script>
      // file-loader css img
      // html-withimg-loader html img
      // file-loader js img
    </script>
  </body>
</html>

index.css

body {
  background-color: yellow;
}

index.js

import './index.css';

import img from './img/logo.png';

console.log(img);//打发dist目录下的路径dist 看起来跟原来路径一样,实际上过程不同

const imgEl = document.createElement('img');
imgEl.src = img;
document.body.appendChild(imgEl);

package.json

{
  "name": "webpack-js-img",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "webpack": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^4.1.1",
    "file-loader": "^6.0.0",
    "html-webpack-plugin": "^4.3.0",
    "mini-css-extract-plugin": "^0.9.0",
    "style-loader": "^1.2.1",
    "webpack": "^4.44.1",
    "webpack-cli": "^3.3.12"
  }
}

webpack.config.js(注意比上次文件增加的内容)

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js'
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
            options: {
              publicPath: '../'
            }
          },
          'css-loader'
        ]
      },
      {
        test: /\.(jpg|png|gif)$/,
        use: {
          loader: 'file-loader',
          options: {
            name: 'imgsss/[name].[ext]',
            esModule: false
          }
        }
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './index.html',
      filename: 'index.html'
    }),
    new MiniCssExtractPlugin({
      filename: 'css/[name].css'
    })
  ]
};

 继npm install和npm run webpack之后生成以下这样目录 

 

dist目录下的index.html 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>使用 file-loader 处理 JS 中的图片</title>
  <link href="css/main.css" rel="stylesheet"></head>
  <body>
    <script>
      // file-loader css img
      // html-withimg-loader html img
      // file-loader js img
    </script>
  <script src="main.js"></script></body>
</html>

 

使用url-loader处理图片 

 总共有src目录下的index.css和index.js、同根的index.html和webpack.config.js文件、src目录下的img目录下logo.png,然后npm init之后生成package.json文件,npm install后生成package-lock.json文件,最后npm run webpack之后有dist目录下各种文件

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>使用 url-loader 处理图片</title>
  </head>
  <body>
    <script>
      // file-loader css img
      // html-withimg-loader html img
      // file-loader js img

      // npm install --save-dev url-loader@4.1.0
    </script>
  </body>
</html>

index.css

body {
  background-color: yellow;
}

index.js

import './index.css';

import img from './img/logo.png';

console.log(img);

const imgEl = document.createElement('img');
imgEl.src = img;
// base64
document.body.appendChild(imgEl);

package.json

{
  "name": "webpack-url-loader",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "webpack": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^4.1.1",
    "file-loader": "^6.0.0",
    "html-webpack-plugin": "^4.3.0",
    "mini-css-extract-plugin": "^0.9.0",
    "style-loader": "^1.2.1",
    "url-loader": "^4.1.0",
    "webpack": "^4.44.1",
    "webpack-cli": "^3.3.12"
  }
}

webpack.config.js(注意比上次文件增加的内容)

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js'
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
            options: {
              publicPath: '../'
            }
          },
          'css-loader'
        ]
      },
      {
        test: /\.(jpg|png|gif)$/,
        use: {
          loader: 'url-loader',
          options: {
            name: 'img/[name].[ext]',
            esModule: false,
            // 图片是4k多,如果限制在3000,会以路径形式显示 如果限制在10000,会以base64显示
            limit: 3000
          }
        }
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './index.html',
      filename: 'index.html'
    }),
    new MiniCssExtractPlugin({
      filename: 'css/[name].css'
    })
  ]
};

 继npm install和npm run webpack之后生成以下这样目录 

  

dist目录下的index.html 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>使用 url-loader 处理图片</title>
  <link href="css/main.css" rel="stylesheet"></head>
  <body>
    <script>
      // file-loader css img
      // html-withimg-loader html img
      // file-loader js img

      // npm install --save-dev url-loader@4.1.0
    </script>
  <script src="main.js"></script></body>
</html>

 限制3000情况下

限制10000情况下

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值