reactjs - 如何预加载 webpack4+babel 捆绑的 CSS @font-face 字体?

标签 reactjs babeljs webpack-4 preload

我有一个用于 React Web 应用程序的 webpack4+babel bundler 设置。在 LESS 文件中,我引用了本地字体。该字体会被复制到构建时的 dist 文件夹中,并且其文件名会被哈希处理。我希望能够预加载此字体。

这是我的 LESS 文件:

@font-face {
    font-family: 'Test';
    src: url('../fonts/test.ttf') format('truetype');
    font-weight: 400;
}

我尝试了以下方法,但到目前为止没有成功:

  1. 将自定义导入添加到我的应用的主 JS 文件中。
import(/* webpackPreload: true */ "../fonts/test.ttf");

这是我的 .babelrc 文件:

{
    "presets": [
        "@babel/preset-env",
        "@babel/preset-react"
    ],
    "plugins": [
        "@babel/plugin-syntax-dynamic-import"
    ]
}

就我在输出的 html 中看到的情况而言,运行 webpack 不会在任何地方产生预加载方向 - 我搜索了 dist 文件夹内容,但什么也没找到。

  • 预加载 webpack 插件
  • 我将其添加到我的 webpack.config.js 文件中:

    plugins: [
      new HtmlWebpackPlugin(),
      new PreloadWebpackPlugin({
        rel: 'preload',
        as(entry) {
          if (/\.css$/.test(entry)) return 'style';
          if (/\.woff$/.test(entry)) return 'font';
          if (/\.png$/.test(entry)) return 'image';
          return 'script';
        }
      })
    ]
    

    这会为 JS 脚本文件包创建预加载,但不会为 CSS 和字体创建预加载。

    关于如何让它发挥作用有什么想法吗?

    最佳答案

    通过安装版本 3beta 并使用 while list 选项,能够使其在 webpack4 上运行:

    yarn add -D preload-webpack-plugin@3.0.0-beta.3
    
    new PreloadWebpackPlugin({
            rel: 'preload',
            as: 'font',
            include: 'allAssets',
            fileWhitelist: [/\.(woff2?|eot|ttf|otf)(\?.*)?$/i],
    
        }),
    

    关于reactjs - 如何预加载 webpack4+babel 捆绑的 CSS @font-face 字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55397432/

    相关文章:

    reactjs - React Native fetch 不适用于 redux?

    javascript - 针对特定子组件的 React propTypes

    javascript - Grunt watch 任务无法转换 ES6 代码

    node.js - 使用 Webpack 4 和 Babel 7 的 React-Loadable SSR

    reactjs - 看来您正在将关键帧声明(hVshE)插入到未标记的字符串中

    javascript - jest.mock 不模拟模块

    javascript - 使用模块加载和类继承将 ES6 转换为 ES5

    twitter-bootstrap - 为什么用 webpack 导入 bootstrap css 而不是仅仅链接到它?

    javascript - MiniCssExtractPlugin 公共(public)路径不起作用

    javascript - Axios POST 到服务器返回空字符串