Webpacker无法解决路径问题

时间:2018-05-29 17:34:36

标签: webpack photoswipe webpacker

我已经将Webpacker安装到我的Rails应用程序中,并且只是尝试将其全部配置。我的自定义CSS中的所有图像都正确解析,但我在使用Photoswipe时遇到了问题。

Photoswipe作为节点模块安装。我的主要stylesheets.scss文件开头像:

@import "node_modules/susy/sass/susy";
@import "node_modules/include-media/dist/include-media";
@import "node_modules/sass-toolkit/stylesheets/toolkit";
@import "node_modules/bourbon/app/assets/stylesheets/bourbon";

@import "../src/stylesheets/base/variables";

@import "node_modules/photoswipe/src/css/main";
@import "node_modules/photoswipe/src/css/default-skin/default-skin";

我的变量文件在顶部设置了以下Photoswipe变量:

$pswp__show-hide-transition-duration: 333ms;
$pswp__controls-transition-duration: 333ms;
$pswp__background-color: #000;
$pswp__placeholder-color: #222;
$pswp__box-sizing-border-box: true; // disable .pswp * { box-sizing:border-box } (in case you already have it in your site css)
$pswp__root-z-index: 1500;
$pswp__assets-path: ''; // path to skin assets folder (preloader, PNG and SVG sprite)
$pswp__error-text-color: #CCC; // "Image not loaded" text color
$pswp__include-minimal-style: true;

我已经尝试将$pswp__assets-path更改为allsorts以期解决此问题,但无论我尝试做什么都无法解决它。

我得到的错误是:

   ./app/webpacker/packs/stylesheets.scss中的错误模块构建失败:   ModuleNotFoundError:找不到模块:错误:无法解决   ' ./默认skin.png' in' / vagrant / app / webpacker / packs'

任何人都能帮我解决此问题?

我几乎尝试了所有我能想到的路径,但仍无法找到该文件。图像100%也存在。

我应该从哪里引用它?包含的scss文件?,scss入口点文件,实际引用图像的scss文件?

我已经尝试了所有三个,现在我对此感到沮丧。

1 个答案:

答案 0 :(得分:0)

Webpack's sass-loader在其自述文件中指出以下内容:

  

url(...)问题

     

由于Sass实现不提供url rewriting,因此所有链接的资产都必须相对于输出。

     
      
  • 如果将生成的CSS传递到css-loader,则所有URL必须相对于条目文件(例如main.scss)。
  •   
  • 如果您只是在不将CSS传递给css-loader的情况下生成CSS,则它必须相对于您的Web根目录。
  •   
     

第一期将打扰您。期望相对引用将针对在其中指定的.sass/.scss文件进行解析(就像在常规.css文件中一样)。   幸运的是,有两个解决方案可以解决此问题:

     
      
  • 使用resolve-url-loader添加缺少的url重写。将其放在加载程序链中的sass-loader之前。
  •   
  • 图书馆作者通常提供一个变量来修改资产路径。例如,bootstrap-sass有一个$icon-font-path
  •   

很高兴,PhotoSwipe还提供了一种指定资产路径的方法。以下是我的案例。

$pswp__assets-path: "../node_modules/photoswipe/src/css/default-skin/";
@import "~photoswipe/src/css/main";
@import "~photoswipe/src/css/default-skin/default-skin";