React 中使用 webpack 动态添加 favicon 图标

本文探讨如何在React项目中使用 webpack 动态添加 favicon 图标。

如果你想要动态地在 html 中 添加 favicon 图标,建议使用 html-wepack-plugin 插件,使用一个模板html文件,通过webpack配置文件可以动态引入favicon图标,生成一个新的带有 favicon 的 html 文件。

安装 html-wepack-plugin:

npm install html-webpack-plugin --save-dev

创建一个html模板文件,不用手动引入 favicon.ico:

webpack.config.js 中配置 html-wepack-plugin:

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

module.exports = {
    entry: {
        index: "./app/index.js",
        login: "./app/login.js",
        vendor: [
            'react',
            'react-dom',
            'react-router-dom',
            'antd'
        ]
    },
    //...
    plugins: [
        //...
        new HtmlWebpackPlugin({
            filename: "./../html/index.html", //编译后生成新的html文件路径
            template: './app/templateHtml/index.html', //原html模板文件路径
            thunks: ['vendor', 'index'],  // 需要引入的入口文件
            excludeChunks: ['login'],  // 不需要引入的入口文件
            favicon: './app/images/favicon.ico' //favicon.ico文件路径
        }),
    ]
}

编译后,新的html文件会自动引入依赖文件,包括 favicon.ico:

 

Webpack是一个流行的模块打包工具,用于将JavaScript、CSS和其他静态资源打包成浏览器可执行的文件。在使用TypeScript编写的React项目配置Webpack,我们需要确保支持TypeScript编译、按需加载和代码分割。 以下是一个基本的Webpack配置示例,假设你已经安装了`webpack`, `react`, `typescript`, `@babel/core`, `@babel/preset-env`, `@babel/preset-react`, 和`@typescript/babel-preset`等依赖: 1. 首先,在项目的根目录创建一个`webpack.config.js`文件: ```javascript // webpack.config.js const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin'); const TsConfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); module.exports = { // 输出路径 output: { filename: '[name].bundle.js', path: path.resolve(__dirname, 'dist'), }, // 模块解析器 resolve: { extensions: ['.ts', '.tsx', '.js'], plugins: [new TsConfigPathsPlugin({ configFile: './tsconfig.json' })], // 使用TypeScript配置文件 }, // 加载器配置 module: { rules: [ { test: /\.tsx?$/, use: ['ts-loader', 'babel-loader'], // 先通过ts-loader处理TS文件,再通过Babel转换语法 exclude: /node_modules/, // 排除第三方库 }, { test: /\.(js|jsx)$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env', '@babel/preset-react'], }, }, }, ], }, // HTML 插件,用于生成HTML入口文件 plugins: [ new HtmlWebpackPlugin({ template: 'src/index.html', // 或者你自定义的模板文件 favicon: path.join(__dirname, 'public/favicon.ico'), // 如果有favicon }), new CleanWebpackPlugin(), // 清理输出目录 new TerserPlugin({ // 压缩JS terserOptions: { mangle: true, compress: { warnings: false, }, }, }), ], // 其他配置如devServer、mode(生产环境或开发环境)等根据实际需求添加 }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值