在 Angular2 应用程序中,我在 webpack 配置中有一个文件加载器设置,如下所示:
{
test: /\.(eot|svg|ttf|woff|woff2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
loader: 'file?name=/assets/fonts/[name].[ext]'
}
我在配置的其他地方也有这个:
modulesDirectories: ['node_modules']
据我了解,文件加载器在 node_modules 文件夹中搜索与给定表达式匹配的任何文件(在本例中为字体文件),并将它们复制到/assets/fonts
构建输出中的文件夹中。但是,这确实有效,因为实际上没有文件被复制到目标文件夹。我错过了什么?
附带说明一下,我还想知道如何处理冲突,因为node_modules
多个包中可能有同名的文件。
更多信息:
vendor.scss
文件包括以下内容: $zmdi-font-path: "assets/fonts"; @import "~material-design-iconic-font/scss/material-design-iconic-font.scss";
sass-loader 最终应用它来生成以下 css:
@font-face {
font-family: 'Material';
src:url('assets/fonts/Material-Design-Iconic-Font.woff2?v=2.2.0') format('woff2'),url('assets/fonts/Material-Design-Iconic-Font.woff?v=2.2.0') format('woff'),url('assets/fonts/Material-Design-Iconic-Font.ttf?v=2.2.0}') format('truetype');
font-weight: normal;
font-style: normal;
}
上述两个步骤将导致浏览器向位于assets/fonts/Material-Design-Iconic-Font.woff2?v=2.2.0
. 显然,直到运行时才会发生这种情况。我require
将文件放在哪里以便在构建时将其复制到资产/字体?
我也在sass-loader
管道中使用:{ test: /.scss$/, loaders: ['raw-loader', 'sass-loader'] }
并将 sass 包含在我的组件中,如下所示:
styleUrls: [
'./../assets/scss/main.scss'
]
从浏览器看,我可以看到 CSS 包含在 HTML 中,但对字体的调用返回 404。