[ webpack4 ] 配置属于自己的打包系统教程(二)—— 资源配置篇

news/2024/7/2 15:36:49

GitHub 完整配置文件地址: https://github.com/yhtx1997/webpack4-Instance

由于篇幅过长分三次发布,建议按顺序看
[ webpack4 ] 配置属于自己的打包系统教程(一)—— 基础配置篇
[ webpack4 ] 配置属于自己的打包系统教程(二)—— 资源配置篇
[ webpack4 ] 配置属于自己的打包系统教程(最终篇)—— 环境配置篇

资源配置篇

资源配置篇

  • ES6 -> ES5
  • 提取 css 到单独文件
  • css 浏览器兼容前缀补全
  • css 代码压缩
  • 使用 sass
  • 使用 HTML 模板
  • 清理旧的打包文件

静态资源加载与解析

通过下面的配置
可以在 js 里引入相应的文件,然后进行解析
也可以直接解析相应的文件

配置 babel 将 ES6 转换为兼容性语法(低版本语法 ES5 或 ES3)

安装 babel-loader

npm install -D babel-loader @babel/core @babel/preset-env 
  • babel-loader:使用 Babel 转换 JavaScript 依赖关系的 Webpack 加载器
  • @babel/core: 将 ES6 代码转换为 ES5
  • @babel/preset-env: 决定使用哪些 api 为旧浏览器提供现代浏览器的新特性
module: {
  rules: [
    {
      test: /\.m?js$/,
      exclude: /(node_modules|bower_components)/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env']
        }
      }
    }
  ]
}

加载 css

安装提取 css 相关的 npm 包

npm install style-loader css-loader -D

提取 css 相关配置

const path = require('path');

module.exports = {
    entry: {
        2048: './src/js/2048.js',
        1024: './src/js/1024.js',
        512: './src/js/512.js'
    },
    output: {
        filename: "[name].js",
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [
           {
             test: /\.css$/, //匹配所有以 .css 为后缀的文件
             use: [//使用以下loader来加载
               'style-loader', 
               'css-loader'
             ]
           }
        ]
    }
}

安装 sass

开发 css 现在多数使用 sass 和 lass ,所以配置下 sass
相应的安装 lass 只需要把 sass-loader 切换为 less-loader

npm install sass-loader node-sass -D

配置

{
    test: /\.scss$/,
    use: [
        "style-loader",
        "css-loader",
        "sass-loader" 
    ]
}

CSS 分离成文件

方案一 安装 extract-text-webpack-plugin

方案一简单写下,推荐方案二

npm install extract-text-webpack-plugin -D
  • extract-text-webpack-plugin 提取 css 到单独文件

配置

const ExtractTextPlugin = require("extract-text-webpack-plugin");

plugins: [
    new CleanWebpackPlugin(['dist']),
    new HtmlWebpackPlugin({
        title:'2048',
        template: './src/index.html',
        minify:true,
        hash:true
    }),
    new ExtractTextPlugin({
        filename: 'css/[name].css'
    }),
],
module: {
    rules: [
       {
            test: /\.scss$/,
            use: ExtractTextPlugin.extract({
              fallback: "style-loader",
              use: ["css-loader","sass-loader"]
            })
      },
    ]
}
方案二 安装 MiniCssExtractPlugin 推荐

与extract-text-webpack-plugin相比

  • 异步加载
  • 没有重复的编译(性能)
  • 更容易使用
  • 特定于CSS
npm install mini-css-extract-plugin postcss-loader autoprefixer postcss optimize-css-assets-webpack-plugin -D
  • mini-css-extract-plugin 提取 css 到单独文件
  • autoprefixer 浏览器兼容前缀补全(例如 -webkit-)
  • optimize-css-assets-webpack-plugin 代码压缩

配置

const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");

optimization: {
    minimizer: [
      new UglifyJsPlugin({
        cache: true,
        parallel: true,
        sourceMap: true // set to true if you want JS source maps
      }),
      new OptimizeCSSAssetsPlugin({})
    ]
  },
plugins: [
    new CleanWebpackPlugin(['dist']),
    new HtmlWebpackPlugin({
        title:'2048',
        template: './src/index.html',
        minify:true,
        hash:true
    }),
    new MiniCssExtractPlugin({
        // Options similar to the same options in webpackOptions.output
        // both options are optional
        filename: "css/[name].css"
    })
],

module: {
    rules: [
        {
            test: /\.scss$/,
            use: [
                MiniCssExtractPlugin.loader,
                'css-loader',
                'postcss-loader',
                'sass-loader',
            ]
          },
    ]
    
}

这里需要注意的是需要新建一个 postcss.config.js 文件,用来配置自动加前缀

module.exports={
    plugins: [
        require('autoprefixer')({ /* ...options */ })
    ]
}

加载数据

数据文件包括 JSON 文件,CSV、TSV 和 XML
JSON 默认就是支持的,所以如果需要处理剩下的使用下面的方法就可以了

安装提取 数据 相关的 npm 包

npm install csv-loader xml-loader -D

安装提取 数据 相关的 npm 包

{
    test: /\.(csv|tsv)$/,
    use: [
    'csv-loader'
    ]
},
{
    test: /\.xml$/,
    use: [
    'xml-loader'
    ]
}

加载其他资源

加载其他静态资源都可以使用 file-loader 来加载

npm install file-loader -D

加载图片

{
    test: /\.(png|svg|jpg|gif)$/,
    use: [
        'file-loader'
    ]
}

加载字体

{
    test: /\.(woff|woff2|eot|ttf|otf)$/,
    use: [
    'file-loader'
    ]
}

设定 HtmlWebpackPlugin

当我们真正应用我们写的代码时,需要我们新建 HTML ,并且需要我们手动的在 HTML 里引入,使用 HtmlWebpackPlugin 可以让我们不用每次都新建 HTML 以及 手动去引入我们的代码

它会帮我们每次运行 webpack 时新建一个 HTML 并引入所有打包好的 js css

安装

npm install html-webpack-plugin -D

配置 HTML 模板

const HtmlWebpackPlugin = require('html-webpack-plugin');//引入HtmlWebpackPlugin

//官网是将其放到了入口 entry 与出口 output 之间
plugins: [
    new HtmlWebpackPlugin({
        title: 'Output Management',//表示 HTML title 标签的内容 
        template: './src/index.html',//表示模板路径
        minify: true,//压缩代码
        hash: true//加上哈希值来达到去缓存的目的
    })
]

清理 ./dist 文件夹

如果我们使用了哈希值来命名我们的文件,那么每次更该内容都会生成新的文件,同时旧的文件依然存在,这样的话一个是乱,一个是浪费

我们可以使用 CleanWebpackPlugin 在每次打包时都会将之前的旧文件清除掉

安装

npm install clean-webpack-plugin -D

配置

const CleanWebpackPlugin = require('clean-webpack-plugin');

plugins: [
    new CleanWebpackPlugin(['dist']),//删除dist
     new HtmlWebpackPlugin({
        title: 'Output Management',//表示 HTML title 标签的内容 
        template: './src/index.html',//表示模板路径
        minify: true,//压缩代码
        hash: true//加上哈希值来达到去缓存的目的
    })
]

http://www.niftyadmin.cn/n/541533.html

相关文章

AFNetworking 3.0 源码解读(八)之 AFImageDownloader

AFImageDownloader 这个类对写DownloadManager有很大的借鉴意义。在平时的开发中,当我们使用UIImageView加载一个网络上的图片时,其原理就是把图片下载下来,然后再赋值。这也是AFImageDownloader这个类的核心功能。 前言 AFImageDownloader 专…

AndroidStudio CPU Monitor使用介绍

安卓CPU Monitor:让你可以很容易地监视应用程序的CPU的实时使用情况。并显示在用户和内核模式中使用的总的处理器时间(包括所有内核)的百分比。 使用前提要求:测试时,程序要与真机或模拟器保持联系(真机要求打开USB调度…

iOS开发-音乐播放器(复杂版)

那么现在给同学补齐一个还算比较完整功能的音乐播放器,还有待完善!废话不多说,直接上代码!先看示例: // // AppDelegate.h // 05-音乐播放器 // // Created by 周昭 on 2017/3/20. // Copyright © 2017年…

改变时间格式的方法

//改变时间格式 function getServerTime(str) {var d eval(new str.substr(1, str.length - 2));var ar_date [d.getFullYear(), d.getMonth() 1, d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds()];for (var i 0; i < ar_date.length; i)ar_date[i] dFor…

Linux下rz,sz与ssh的配合使用

2019独角兽企业重金招聘Python工程师标准>>> 一般来说&#xff0c;linux服务器大多是通过ssh客户端来进行远程的登陆和管理的&#xff0c;使用ssh登陆linux主机以后&#xff0c;如何能够快速的和本地机器进行文件的交互呢&#xff0c;也就是上传和下载文件到服务器和…

最完整Android Studio插件整理

现在Android的开发者基本上都使用Android Studio进行开发(如果你还在使用eclipse那也行&#xff0c;毕竟你乐意怎么样都行)。使用好Android Studio插件能大量的减少我们的工作量。 1.GsonFormat 快速将json字符串转换成一个Java Bean&#xff0c;免去我们根据json字符串手写对应…

iOS开发-Quartz 2D动态绘图上下波动展示

今天呢给同学讲解一个项目中非常常用的动态绘图界面&#xff01;以及实现原理解析和思路分析还有Quart 2D的使用&#xff01;那么废话不多说直接上代码! // // ZZQuartz2DView.h // 08-动态绘图 // // Created by 周昭 on 2017/3/27. // Copyright © 2017年 ZZ. …

如何上传base64编码图片到七牛云

接口说明 POST /putb64/<Fsize>/key/<EncodedKey>/mimeType/<EncodedMimeType>/crc32/<Crc32>/x:user-var/<EncodedUserVarVal> Host: upload.qiniu.com Authorization: UpToken <UpToken> Content-Type: application/octet-stream<Bas…