You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Webpack中使用HtmlWebpackPlugin添加字体失败求助

Webpack字体引入问题解决

问题详情

我是Webpack新手,在添加字体时遇到问题。已配置HtmlWebpackPlugin、file-loader等工具,尝试在HTML模板中引入字体样式文件stylesheet.css但始终无法找到,调整路径及字体文件存放位置均无效。相关配置代码如下:

webpack.config.js 核心配置

plugins: [
    new ESLintPlugin(),
    new HtmlWebpackPlugin({
        template: '/var/lib/cornerstone3D/utils/PROYECTO/template.html',
    }),
    new webpack.DefinePlugin({
         __BASE_PATH__: "''",
    }),
    new CopyPlugin({
        patterns: [
            {
                from: '../../../node_modules/@cornerstonejs/dicom-image-loader/dist/dynamic-import',
                to: '/var/lib/cornerstone3D/utils/PROYECTO/dist',
            },
        ],
    }),
    // new BundleAnalyzerPlugin()
],

entry: path.join('/var/lib/cornerstone3D/packages/tools/proyecto', './editor/index.ts'),
output: {
    path: '/var/lib/cornerstone3D/utils/PROYECTO/dist',
    filename: 'editor.js',
},

file-loader 规则配置

{
    test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
    use: [
        {
            loader: 'file-loader',
            options: {
                name: '[name].[ext]',
                outputPath: ''
            }
        }
    ]
},

HTML中尝试的引入方式

<link type="css" rel="stylesheet" 
 href="./packages/tools/proyecto/editor/fonts/Montserrat/stylesheet.css">

以及

<link type="css" rel="stylesheet" href="./fonts/Montserrat/stylesheet.css">

stylesheet.css 内容

@font-face {
    font-family: 'montserratbold';

    src: url('montserrat-bold-webfont.eot');
    src: url('montserrat-bold-webfont.eot?#iefix') format('embedded-opentype'),
         url('montserrat-bold-webfont.woff2') format('woff2'),
         url('montserrat-bold-webfont.woff') format('woff'),
         url('montserrat-bold-webfont.ttf') format('truetype'),
         url('montserrat-bold-webfont.svg#montserratbold') format('svg');
    font-weight: normal;
    font-style: normal;
}

解决步骤

1. 改用Webpack模块方式导入CSS

不要在HTML模板中直接引入CSS,而是在入口文件index.ts中导入:

// /var/lib/cornerstone3D/packages/tools/proyecto/editor/index.ts
import './fonts/Montserrat/stylesheet.css';

2. 添加CSS解析loader

Webpack无法直接处理CSS,需要安装并配置css-loader和style-loader:
首先安装依赖:

npm install style-loader css-loader --save-dev

然后在webpack.config.js的module.rules中添加规则:

{
  test: /\.css$/i,
  use: ['style-loader', 'css-loader'], // 生产环境可替换为MiniCssExtractPlugin.loader
}

3. 调整file-loader路径配置

修改file-loader的输出和公共路径,确保CSS中的字体引用路径正确:

{
    test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
    use: [
        {
            loader: 'file-loader',
            options: {
                name: '[name].[ext]',
                outputPath: 'fonts/Montserrat/', // 字体输出到dist/fonts/Montserrat
                publicPath: './fonts/Montserrat/' // 让CSS中的url指向该路径
            }
        }
    ]
},

4. 移除HTML中的link标签

删除模板里的<link>标签,Webpack会自动处理CSS的注入(style-loader会插入style标签,生产环境用MiniCssExtractPlugin会生成单独CSS文件并自动添加link)。

5. 确认目录结构

确保文件结构与导入路径匹配:

packages/tools/proyecto/editor/
├── index.ts
└── fonts/
    └── Montserrat/
        ├── stylesheet.css
        ├── montserrat-bold-webfont.eot
        ├── montserrat-bold-webfont.woff2
        ├── montserrat-bold-webfont.woff
        ├── montserrat-bold-webfont.ttf
        └── montserrat-bold-webfont.svg

内容的提问来源于stack exchange,提问作者adrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:30:26