首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Webpack-5 -阻止Webpack处理scss (或css)中图像的根相对路径。

Webpack-5 -阻止Webpack处理scss (或css)中图像的根相对路径。
EN

Stack Overflow用户
提问于 2022-02-24 15:20:23
回答 1查看 857关注 0票数 5

升级到Webpack-5之后,我得到了这个错误:

Error: Can't resolve '/path/to/image.jpg' in '/app/path/to/module/module'

问题是用于css背景的图像没有存储在存储库中,并且在构建时不可用。(为什么会这样,这是另一个时代的故事。)

这一问题:

在我的scss文件中:

代码语言:javascript
复制
background-image: url(/path/to/image.jpg);

在Webpack-4中,它保持原样,而且刚刚开始工作。

Webpack-5尝试处理该图像,但失败,出现上述错误.

这是行不通的:

在路径中添加引号..。

代码语言:javascript
复制
background-image: url("/path/to/image.jpg");

我试过Webpacks魔术评论..。

代码语言:javascript
复制
/* webpackIgnore: true */
background-image: url(/path/to/image.jpg)

..。但是它没有起作用(也许乳清被剥得太早了?--从我的创建-react app示例中的dev构建就可以看出这一点)。

webpack.IgnorePlugin

我还尝试了一些从这里的边缘案例提示。但我认为这太迟了,因为Webpack已经假定文件存在。

这起作用了但是..。

真正起作用的是,包括资产的绝对路径:

代码语言:javascript
复制
background-image: url(https://www.example.com/path/to/image.jpg);

但这就产生了它自己的一系列问题。

更新:

我在这个回购上转载了这个问题

Webpack魔术评说工作是为了发展建设,而不是为了生产建设。

代码语言:javascript
复制
~/webpack-test$ npm run build

> webpack-test@0.1.0 build
> node scripts/build.js

Creating an optimized production build...
Failed to compile.

Module not found: Error: Can't resolve '/mypics/pom.jpg' in '/home/nodejs/webpack-test/src'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-10 18:46:37

原来css-加载程序只有在options.url下才有配置选项!

感谢Webpack团队的亚历山大·阿克伊特回答我的问题这里

它具有传递一个包含filter()谓词函数的对象的选项,该对象应该确定是否应该处理路径:

代码语言:javascript
复制
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        loader: "css-loader",
        options: {
          url: {
            filter: (url, _resourcePath) => {
              // Disable processing for root-relative urls under /images
              return !/^\/images\//.test(url)

              // This would disable processing for all root-relative urls:
              // return !/^\//.test(url);
            },
          },
        },
      },
    ],
  },
};

下面是我用来解决问题中提到的回购中的这个问题的提交:https://github.com/dovidweisz/webpack-test/commit/a9e4cfc4ae0a5a8475ddd2cc114a8650846db421

您还可以通过简单地将传递给options.url来禁用false所有的url处理。

代码语言:javascript
复制
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/i,
        loader: "css-loader",
        options: {
          url: false,
        },
      },
    ],
  },
};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71254243

复制
相关文章

相似问题

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