【问题标题】:vue-init. Can't resolve fonts when npm run unitVue 初始化。 npm 运行单元时无法解析字体
【发布时间】:2025-12-26 14:30:11
【问题描述】:

我有一个项目,使用 vue-init 和 webpack 和测试创建

我将使用“icomoon”创建的自定义字体添加到我的项目中,就像这样

main.js:

import './main.scss'

main.scss:

@import './assets/fonts/icons/style.scss';

style.scss

@import 'variables';

@font-face {
  font-family: 'icomoon';
  src:
    url('#{$icomoon-font-path}/icomoon.ttf') format('truetype'),
    url('#{$icomoon-font-path}/icomoon.woff') format('woff'),
    url('#{$icomoon-font-path}/icomoon.svg') format('svg');
  font-weight: normal;
  font-style: normal;
}
...

variables.scss

$icomoon-font-path: './assets/fonts/icons/fonts' !default;
...

项目结构如下:

src
|-assets
| |-fonts
| |   icons
| |   |-fonts
| |   | |-icomoon.svg
| |   | |-icomoon.ttf
| |   | |-icomoon.woff
| |   |-style.scss
| |   |-variables.scss
| |-...
|-...
|-main.js
|-main.scss
|-...

当我尝试执行 npm run unit 时,收到如下错误:

...

ERROR in ./node_modules/css-loader?{"minimize":false}!./node_modules/sass-loader/lib/loader.js?{}!./src/assets/fonts/icons/style.scss
Module not found: Error: Can't resolve './assets/fonts/icons/fonts/icomoon.woff' in '/Users/administrator/projects/front-end-landing/src/assets/fonts/icons'
 @ ./node_modules/css-loader?{"minimize":false}!./node_modules/sass-loader/lib/loader.js?{}!./src/assets/fonts/icons/style.scss 6:188-238
 @ ./src/assets/fonts/icons/style.scss
 @ ./src ^\.\/(?!main(\.js)?$)
 @ ./test/unit/index.js

...

PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  Error: Cannot find module "./assets/fonts/icons/fonts/icomoon.ttf"
  at http://localhost:9877webpack:///src/assets/fonts/icons/style.scss:6:0 <- index.js:39212

但同时,如果我使用npm run dev 运行项目,图标可以正常工作,我可以看到它们并且它们正在成功加载

所以,我的问题是,我做错了什么,为什么当我尝试运行测试时,图标没有正确加载?

【问题讨论】:

    标签: javascript webpack fonts vue.js karma-runner


    【解决方案1】:

    找到解决方案here

    实际上,解决方案 - 包括这样的字体

    $font_path: '~@/assets/fonts/';

    ~@/开头

    【讨论】: