我有以下结构:
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?