导入光滑的轮播主题css会在webpack构建上引发错误

时间:2018-01-24 07:25:03

标签: webpack sass slick.js

我正在尝试在我的父scss中导入slick-theme.scss

@import "../node_modules/slick-carousel/slick/slick-theme.css";

但在捆绑期间,我在slick-theme.scss中导入的文件出错。这是错误日志

ERROR in ./node_modules/css-loader!./node_modules/postcss-loader/lib!./node_modules/sass-loader/lib/loader.js!./sass/app.scss
    Module not found: Error: Can't resolve './ajax-loader.gif' in '/Users/Vishal/Documents/Work/nf-core/sass'
     @ ./node_modules/css-loader!./node_modules/postcss-loader/lib!./node_modules/sass-loader/lib/loader.js!./sass/app.scss 6:89679-89707

我尝试将resolve-url-loader添加到webpack配置中,但这没有帮助。

这是我的webpack scss加载器部分

loaders: commonConfig.module.loaders.concat({
    test: /\.s?css$/,
    exclude: /(node_modules)/,
    use: ExtractTextPlugin.extract({
        fallback: 'style-loader',
        use: ['css-loader', 'postcss-loader', 'sass-loader']
    })
})

3 个答案:

答案 0 :(得分:5)

创建一个.scss文件(即fix-slick.scss)并写入:

$slick-font-path: "~slick-carousel/slick/fonts/" !default;
$slick-font-family: "slick" !default;
$slick-loader-path: "~slick-carousel/slick/" !default;
$slick-arrow-color: black !default; 

现在,从主scss文件中导入此文件。

答案 1 :(得分:2)

CSS加载器还会将使用@import 'other.css'background-image: url("/images/loader.gif")引用的资源返回给webpack模块树。

" Can't resolve './ajax-loader.gif'"听起来有解决gif路径的问题。我不认为它应该以{{1​​}}开头.CS加载器通常希望路径以字符(文件名)开头,.表示绝对值和{{1}对于非相对路径(webpack功能)。这是slick-theme.scss中的错误吗?

添加文件加载器或url-loader来处理gif / png / jpg文件也很有用。
主要是将它们从node_modules中取出到你的dist / release文件夹中。

答案 2 :(得分:2)

Roberto Alicata的解决方案有效,但无需附加文件即可轻松实现。只需在导入slick之前添加以下两个变量即可:

$slick-font-path: "~slick-carousel/slick/fonts/";
$slick-loader-path: "~slick-carousel/slick/";

@import '~slick-carousel/slick/slick', '~slick-carousel/slick/slick-theme';

其他变量不会引起问题,并且!default标志用于定义默认值要覆盖的,而不是覆盖它。