首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过相对路径包含图像的正确方法

通过相对路径包含图像的正确方法
EN

Stack Overflow用户
提问于 2018-12-21 19:06:30
回答 2查看 10.9K关注 0票数 4

我已经将laravel-mix更新为4.0.12版本,并在*.scss中遇到坏的构建,在这里我使用了一个相对路径来包含背景图像。

我有下一个文件结构

代码语言:javascript
复制
resources/
|-assets/
||-img/
|||-background.png
||-sass/
|||-footer.scss

下一个是我在footer.scss中的代码

代码语言:javascript
复制
.footer {
  background-image: url(../img/background.png)
}

我的webpack.mix.js是下一个

代码语言:javascript
复制
const mix = require('laravel-mix');

const resourcesAssets = 'resources/assets/';
const dest = 'public/assets/';

mix
  .copy(`${resourcesAssets}images`, `${dest}images`, false)
  .sass(`${resourcesAssets}scss/footer.scss`, `${dest}css`);

在完成npm run prod时,我得到了

代码语言:javascript
复制
Module build failed (from ./node_modules/css-loader/index.js):
ModuleBuildError: Module build failed (from ./node_modules/resolve-url-loader/index.js):
Error: resolve-url-loader: CSS error
predicate must return an absolute path or the result of calling next()
at file://C:\xampp\htdocs\laravel-project\resources\assets\sass\footer.scss:2:3
at encodeError (C:\xampp\htdocs\laravel-project\node_modules\resolve-url-loader\index.js:218:12)
at onFailure (C:\xampp\htdocs\laravel-project\node_modules\resolve-url-loader\index.js:175:14)
at <anonymous>
    at runMicrotasksCallback (internal/process/next_tick.js:122:5)
    at _combinedTickCallback (internal/process/next_tick.js:132:7)
    at process._tickCallback (internal/process/next_tick.js:181:9)
    at runLoaders (C:\xampp\htdocs\laravel-project\node_modules\webpack\lib\NormalModule.js:301:20)
    at C:\xampp\htdocs\laravel-project\node_modules\loader-runner\lib\LoaderRunner.js:364:11
    at C:\xampp\htdocs\laravel-project\node_modules\loader-runner\lib\LoaderRunner.js:230:18
    at context.callback (C:\xampp\htdocs\laravel-project\node_modules\loader-runner\lib\LoaderRunner.js:111:13)
    at onFailure (C:\xampp\htdocs\laravel-project\node_modules\resolve-url-loader\index.js:175:5)
    at <anonymous>
        at runMicrotasksCallback (internal/process/next_tick.js:122:5)
        at _combinedTickCallback (internal/process/next_tick.js:132:7)
        at process._tickCallback (internal/process/next_tick.js:181:9)

        error  in ./resources/assets/sass/footer.scss

我怎样才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-23 17:08:29

这是Webpack的URL重写,因为Laravel是建在Webpack上面的。对于CSS编译,Webpack重写并优化样式表中的任何url()调用。

然而,根据Laravel博士

任何给定url()的绝对路径都将被排除在URL重写之外。例如,url('/images/thing.png')url('http://example.com/images/thing.png')不会被修改。

所以,Mix试图将你的CSS重写为某事物。像这样:

代码语言:javascript
复制
.footer {
    background-image: url(/img/background.png?<some-hash-identifier>)
}

在这种情况下,您可以像这样禁用url(),并且Mix不会在footer.scss中接触到url(../img/background.png)

代码语言:javascript
复制
mix.sass(`${resourcesAssets}scss/footer.scss`, `${dest}css`);
    .options({
        processCssUrls: false
    });
票数 6
EN

Stack Overflow用户

发布于 2018-12-21 20:10:47

问题出在太新的"resolve-url-loader": "^3.0.0"上。

在一段时间前安装了一个中间版本的"laravel-mix": "~3"之后,它被添加到package.json中。

删除它并重新运行构建可以帮助我解决问题。在运行"resolve-url-loader": "2.3.1"后,laravel添加了npm run prod

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53889663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档