我有以下结构:
node_modules
- my_component
- font
- scss
- my_component.scss
src
- my_app.js
- my_app.scss
我正在尝试将样式导入my_component.scss
. 此文件包含@font-face
引用../font/
. 所以像:
// my_component.scss
@font-face {
font-family: 'Helvetica Neue';
font-weight: $weight-medium;
src: url('../font/font-file.eot');
}
在my_app.js
我需要与之关联的 SCSS 文件。所以
// my_app.js
require('./my_app.scss');
//other app-specific code
我是my_app.scss
,我正在进口my_component.scss
:
// my_app.scss
import 'my_component';
并且sassConfig
设置为解析为node_modules/my_component/scss
以便导入工作。
我的加载器配置使用sass-loader
,resolve-url-loader
和css-loader
. 这是一个片段:
//loaders.js
loaders.push({
test: /\.scss$/,
loader: 'style!css?sourcemap!resolve-url!sass?sourceMap'
});
这是我观察到的:
- 当我运行
webpack-dev-server
时,url
引用正确解析 - 但是,当我
webpack
使用相同的 conf 文件运行时,我Module not found: Error: Cannot resolve 'file' or 'directory' ../font/font-file.ttf
进入src/font/
我尝试过的事情:
- 使用
$font-path
变量来引用../fonts
并将其设置为node_modules/my_components/font
- 检查我的加载器的顺序,更新我的 webpack 版本等。
更新
我的sassLoader
配置以前有node-sass-import-once 的配置。当我删除它时,我的字体网址再次开始解析,但是我生成的 CSS 包含大量重复的样式。
node-sass 重复导入每个@import
而不进行任何类型的重复数据删除(我知道它不应该能够自己完成)。但这node-sass-import-once
意味着这种事情会破坏 resolve-url-loader。
以下是我的问题:
- 为什么 node-sass-import-once 会破坏 Webpack resolve-url-loader?
- 有什么方法可以对导入的 Webpack 进行重复数据删除并生成没有样式重复的 CSS?