如何在 webpack 中配置 font-awesome-webpack 的字体文件输出目录?

How to configure font file output directory from font-awesome-webpack in webpack?

我刚刚安装了 font-awesome-webpack。我使用以下方式导入它:require("font-awesome-webpack");

我的 webpack 配置在我的模块加载器数组中包含以下内容:

    { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "url-loader?limit=10000&minetype=application/font-woff" },
    { test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "file-loader" }

问题是我在开发者控制台中收到此错误:

localhost/:1 GET http://localhost/mysite/app/db812d8a70a4e88e888744c1c9a27e89.woff2 
localhost/:1 GET http://localhost/mysite/app/a35720c2fed2c7f043bc7e4ffb45e073.woff 
localhost/:1 GET http://localhost/mysite/app/a3de2170e4e9df77161ea5d3f31b2668.ttf 404 (Not Found)

问题是,这些文件是在根目录(在 mysite 目录中)创建的。如何配置这些 woffs 和 ttf 在 mysite/app 目录中输出?

我最近想在 webpack v1 中使用 font awesome,我安装了 npm 模块 font-awesome 而不是 font-awesome-webpack

你必须先安装几个loader:

npm i css-loader file-loader style-loader url-loader

并在您的 webpack.config.js 中添加使用它们:

module: {
    loaders: [{
      test: /\.css$/,
      loader: 'style!css?sourceMap'
    }, {
      test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
      loader: "url?limit=10000&mimetype=application/font-woff"
    }, {
      test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
      loader: "url?limit=10000&mimetype=application/font-woff"
    }, {
      test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
      loader: "url?limit=10000&mimetype=application/octet-stream"
    }, {
      test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
      loader: "file"
    }, {
      test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
      loader: "url?limit=10000&mimetype=image/svg+xml"
    }]
  }

现在,如果您在 entry.js 中包含:

require('font-awesome/css/font-awesome.css');

您通常可以在模板中使用 font-awesome :

<i class="fa fa-times"></i>

这个要点帮助了我:https://gist.github.com/Turbo87/e8e941e68308d3b40ef6

截至 2016 年 2 月,这似乎是 webpack 的常见问题,所以我希望这能提供一些帮助。如果将此添加到加载程序:'&name=./path/[hash].[ext]',则指定在何处查找这些文件。例如:

{
    test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
    loader: 'url-loader?limit=10000&mimetype=application/font-woff&name=./[hash].[ext]'
}

这会将正确的 URL 字体放入生成的 CSS 文件中。

我在处理 css/scss 以外的任何事情时推荐使用此方法。希望这可以帮助。

除了上面的回答,我 我必须在输出中指定一个路径以使其像这样工作以指定托管位置而不是将资产写入根路径:

output: {
     filename: "./bundle.js",
     path: “./client”
},
module: {
       loaders[
          {
              test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
              loader: "url?limit=10000&mimetype=application/font-woff&name=./webpack-assets/[name]/[hash].[ext]"
            }, {
              test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
              loader: "url?limit=10000&mimetype=application/font-woff&name=./webpack-assets/[name]/[hash].[ext]"
            }, {
              test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
              loader: "url?limit=10000&mimetype=application/octet-stream&name=./webpack-assets/[name]/[hash].[ext]"
            }, {
              test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
              loader: "file?&name=./webpack-assets/[name]/[hash].[ext]"
            }, {
              test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
              loader: "url?limit=10000&mimetype=image/svg+xml&name=./webpack-assets/[name]/[hash].[ext]"
            }   
  ]  // loaders
} // module 

这是我的情况,因为我的脚本路径如下:

    script(src='/javascripts/app.js')

因此,我必须将“&name./javascripts/[hash].[ext]”添加到所有字体文件中,例如:

{
  test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
  loader: "url?limit=10000&mimetype=application/font-woff&name=./javascripts/[hash].[ext]"
}, {
  test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
  loader: "url?limit=10000&mimetype=application/font-woff&name=./javascripts/[hash].[ext]"
}, {
  test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
  loader: "url?limit=10000&mimetype=application/octet-stream&name=./javascripts/[hash].[ext]"
}, {
  test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
  loader: "file?name=./javascripts/[hash].[ext]"
}, {
  test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
  loader: "url?limit=10000&mimetype=image/svg+xml&name=./javascripts/[hash].[ext]"
}
{
    test: /\.(png|woff|woff2|eot|ttf|svg)(\?v=\d+\.\d+\.\d+)?$/,
    loader: 'url-loader?limit=100000'
}

这个模式对我有帮助

font-awesome-webpack 在我的 PC 上工作,但它不能在我的 Mac 上工作。我认为我的 PC 仍然为 .woff2、.woff 和 .tiff 抛出 404,但图标显示正常,所以我忽略了这个问题。

但是,我的 Mac 不会显示图标。在阅读此问答时,我尝试了很多事情。这是导致我的解决方案的原因:

  1. 在我的 http://localhost:8080/View/ 页面上,我收到了类似于下面 link 的 404:
  2. 我在浏览器中输入了http://localhost:8080/View/e6cf7c6ec7c2d6f670ae9d762604cb0b.woff2,确认了404。
  3. 我试着去 http://localhost:8080/e6cf7c6ec7c2d6f670ae9d762604cb0b.woff2(删除字体文件之前的额外路径),并且能够访问该文件。
  4. 我修改了 Paul 的回答以删除使文件请求相对的 .

例如,保罗建议:

{
    test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
    loader: 'url-loader?limit=10000&minetype=application/font-woff&name=./[hash].[ext]'
}

注意使用 ./[hash].[ext]&name 参数。我删除了前导 .,现在没有 404(浏览器正确地从站点的根目录请求文件):

{
    test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
    loader: 'url-loader?limit=10000&minetype=application/font-woff&name=/[hash].[ext]'
}

结论:如果您的入口点不在您的网站根目录下,并且您能够访问网站根目录下的字体文件,您可能只需要使用此名称配置来修复路径。

遇到同样的问题。

使用以下语法修复它,

loader: "file?name=./fonts/[hash].[ext]"

fonts为目录名,替换成你自己的目录名

示例:

{ 
  test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, 
  loader: "url?name=/build/[hash].[ext]&limit=8192&mimetype=application/font-woff"
}

请注意,我在使用 font-awesome-loader 时遇到了类似的错误。 无论上述任何更改如何,目录都不会设置正确。

要更正此问题,可以将选项 publicPath 添加到输出中:

output: { path: config.outputPath, filename: '[name].js', publicPath: '/assets/' },

文件夹 /assets/ 将更改为您实际存储字体的位置。

希望这对您有所帮助。