【前端技术】Plugin的使用

2022-01-24 13:56:04 浏览数 (1)

一、html-webpack-plugin

作用:

  1. 为html文件中引入的外部资源如script、link动态添加每次compile后的hash,防止引用缓存的外部文件问题
  2. 可以生成创建html入口文件,比如单页面可以生成一个html文件入口,配置N个html-webpack-plugin可以生成N个页面入口

原理:将 webpack中entry配置的相关入口chunk 和 extract-text-webpack-plugin抽取的css样式 插入到该插件提供的template或者templateContent配置项指定的内容基础上生成一个html文件,具体插入方式是将样式link插入到head元素中,script插入到head或者body中。

1.1 安装插件

代码语言:javascript复制
npm install --save-dev html-webpack-plugin

npm run build 之后,就会生成dist文件,但是这个文件中有index.html。因为src文件中用到了 这个,打包后并没有。

所有需要配置模板 解决了打包之后,还需手动添加index.html文件的问题

1.2 配置webpack.config.js文件

代码语言:javascript复制
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  mode:'development',
  entry:path.join(__dirname,'./src/index.js'), // 入口
  output: {
    // 把所有依赖的模块合并输出到一个 bundle.js 文件
    filename: 'bundle.js',
    // 输出文件都放到 dist 目录下
    path: path.resolve(__dirname, './dist'),
  },
  module: {
    rules:[
          {
            test:/.(png|jpe?g|gif)$/i,
            use:[
              {
                loader:'url-loader',
                options:{
                  name:'[name].[ext]',
                  outputPath:'imgs/',
                  limit:20480
                }
              }
            ]
          },
        {
          test:/.scss$/i,
          use:[
            "style-loader",
            // 对css-loader进行配置
            {
              loader:'css-loader',
               options: {
                 importLoaders:2
               }
            },
            "postcss-loader",
             "sass-loader"
          ]
        }
      ]
  },
  plugins:[
    new HtmlWebpackPlugin({
      template:'./src/index.html' // 源模板文件
    })
  ]
};

1.3 在src文件新建index.html文件

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app"></div>
  <script src="bundle.js"></script>
</body>
</html>

二、clean-webpack-plugin

作用:在每次构建前清理 /dist 文件夹测试过程:

代码语言:javascript复制
output:{
 filename:'test.js', 
}
// 这里将bound.js改成test.js,npm run build之后,dist文件会出现test.js和bound.js,index.js会引入最先的test.js

存在问题:bound.js不应该存在。期望效果:bound.js 不存在,每次打包输出最新的文件,html也是引用最新的文件名

1.1 安装插件

代码语言:javascript复制
npm install --save-dev clean-webpack-plugin

1.2 配置webpack.config.js文件

代码语言:javascript复制
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

 plugins:[
    new HtmlWebpackPlugin({
      template:'./src/index.html'
    }),
    new CleanWebpackPlugin()
  ]

结果:clean-webpack-plugin帮我们实现了打包之前清空dist目录,然后根据output,产出最新的文件。

三、entry

3.1 完整写法

代码语言:javascript复制
entry: {
 main:'./src/index.js' // 完整写法
},
output: {
 path: path.resolve(__dirname, './dist'), // 输出文件都放到 dist 目录下
}

如果没有filename,打包后,会生成dist/main.js。为什么是main.js 是因为entry。说明如果output不设置filename的话,打包的时候,会拿entry.main的key值当做filename。

3.2 两个入口

代码语言:javascript复制
entry: {
 main:'./src/index.js', // 完整写法
  sub:'./src/index.js'
}
// 打包之后会生成main.js和sub.js 两个文件
// 如果打包输出的文件需要和入口文件相对应,可以如下配置
output: {
 filename:'[name].js',
  path: path.resolve(__dirname, './dist'),
}

3.3 简写

代码语言:javascript复制
entry:path.join(__dirname,'./src/index.js'), // 这是简写

四、配置main.js的CDN网址

如果打包之后的引入的main.js是CDN网址的话,需要配置如下信息:

代码语言:javascript复制
output: {
 publicPath:'http://cdn.com.cn',
  filename:'[name].js',
  path: path.resolve(__dirname, './dist')
}

打包之后,dist/index文件显示如下:

代码语言:javascript复制
<script src="http://cdn.com.cn/main.js"></script><script src="http://cdn.com.cn/sub.js"></script>

本示例提供完整代码:链接: https://pan.baidu.com/s/1ZnQ2ykAlWivhUB1Xn_ftZw 提取码: 75uy

0 人点赞