【问题标题】:How can I make FontAwesome work with vue-cli webpack-simple template?如何使 FontAwesome 与 vue-cli webpack-simple 模板一起使用?
【发布时间】:2025-12-10 09:40:01
【问题描述】:

我用vue-cli生成一个默认项目:

vue init webpack-simple grid-prototype

我通过 npm 安装 FontAwesome:

npm install --save fontawesome

之后,我将它包含在main.js 中:

import 'font-awesome/css/font-awesome.css'

我执行应用程序:

npm run dev

我得到这个错误:

Failed to compile.

./node_modules/font-awesome/fonts/fontawesome-webfont.ttf?v=4.7.0
Module parse failed: Unexpected character '' (1:0)
You may need an appropriate loader to handle this file type.
(Source code omitted for this binary file)
 @ ./node_modules/css-loader!./node_modules/font-awesome/css/font-awesome.css 7:684-735
 @ ./node_modules/font-awesome/css/font-awesome.css
 @ ./src/main.js
 @ multi (webpack)-dev-server/client?http://localhost:8082 webpack/hot/dev-server ./src/main.js

这是我的webpack.config.js(这是 cli 创建的默认值):

var path = require("path");
var webpack = require("webpack");

module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "./dist"),
    publicPath: "/dist/",
    filename: "build.js"
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ["vue-style-loader", "css-loader"]
      },
      {
        test: /\.vue$/,
        loader: "vue-loader",
        options: {
          loaders: {}
          // other vue-loader options go here
        }
      },
      {
        test: /\.js$/,
        loader: "babel-loader",
        exclude: /node_modules/
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        loader: "file-loader",
        options: {
          name: "[name].[ext]?[hash]"
        }
      }
    ]
  },
  resolve: {
    alias: {
      vue$: "vue/dist/vue.esm.js"
    },
    extensions: ["*", ".js", ".vue", ".json"]
  },
  devServer: {
    historyApiFallback: true,
    noInfo: true,
    overlay: true
  },
  performance: {
    hints: false
  },
  devtool: "#eval-source-map"
};

if (process.env.NODE_ENV === "production") {
  module.exports.devtool = "#source-map";
  // http://vue-loader.vuejs.org/en/workflow/production.html
  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      "process.env": {
        NODE_ENV: '"production"'
      }
    }),
    new webpack.optimize.UglifyJsPlugin({
      sourceMap: true,
      compress: {
        warnings: false
      }
    }),
    new webpack.LoaderOptionsPlugin({
      minimize: true
    })
  ]);
}

我做错了什么?

【问题讨论】:

标签: npm webpack vue.js font-awesome


【解决方案1】:

webpack-simple 适用于快速原型制作,没有高级规则。

解决方案 #1:使用 webpack 模板而不是 webpack-simple 以避免将来出现此问题和其他问题。

解决方案 #2:使用 CDN 中的 FontAwesome,例如: https://www.bootstrapcdn.com/fontawesome/

我的意思是,只需将 CDN css 添加到您的 index.html

解决方案 #3:在 webpack 配置中再添加一条规则

module: {
  rules: [
   {
      test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
      loader: 'url-loader',
      options: {
        limit: 10000,
        name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
      }
   }
 ]

就像在webpack 模板中一样:

https://github.com/vuejs-templates/webpack/blob/develop/template/build/webpack.base.conf.js

【讨论】:

  • 我正在尝试#3,但它给了我一个错误说utils is not defined。它在哪里?
  • @amedina 调查webpack 模板有utils 定义在另一个地方