【问题标题】:Disable resolving for CSS/SASS/SCSS/LESS URLs in Webpack 5在 Webpack 5 中禁用 CSS/SASS/SCSS/LESS URL 的解析
【发布时间】:2021-09-24 21:58:12
【问题描述】:

在 SASS 中,我有一个带有如下 URL 的 CSS 规则:

.eSearchFAQsAccord-q {
  &::after {
    content: url("./images/caret.svg");
  }
}

默认情况下,Webpack 会解决这个问题(尽管它会阻塞我的 SVG)。我希望它不解决。我希望浏览器从我的static 目录中单独加载此图像。

到目前为止,我不知道该说些什么。我在我的 Webpack 配置中尝试了很多来自网络的 很多 设置,但都不起作用......

这是我的 Webpack 配置,我认为它是开箱即用的:

const CopyWebpackPlugin = require("copy-webpack-plugin");

module.exports = {
  mode: "development",
  entry: {
    index: `./src/index.js`,
  },
  target: "web",
  output: {
    path: `${__dirname}/dist`,
    filename: "[name].js",
  },
  plugins: [
    new CopyWebpackPlugin({
      patterns: [{ from: "static" }],
    }),
  ],
  devServer: {
    hot: true,
    inline: true,
    host: "localhost",
    port: 8080,
    watchOptions: {
      poll: true,
    },
  },
  module: {
    rules: [
      {
        
        test: /\.s[ac]ss$/i,
        use: [
          "style-loader",
          {
            loader: "css-loader",
            options: {
              sourceMap: true,
            },
          },
          {
            loader: "sass-loader",
            options: {
              sourceMap: true,
            },
          },
        ],
      },
      {
        test: /\.js$/,
        enforce: "pre",
        use: ["source-map-loader"],
      },
    ],
  },
};

我确定我的问题是因为我对 Webpack 没有深入的了解,但是我认为文档并不是一目了然。

【问题讨论】:

  • 您是否在使用 css-loader,如果是,请尝试删除它。 webpack.js.org/loaders/css-loader
  • 是的,我认为我的配置接近默认设置...是说这是禁用该功能的方式吗?完全放弃 css-loader?
  • 你为什么要为 CSS 使用 webpack?唯一需要的是,如果您使用样式化的组件(例如,导入 css 文件的 JS 代码,这在很多情况下是有问题的)。对于普通页面 CSS,你根本不需要 webpack,只需将你的 sass 编译为你的资产目录中的 css,然后在你的 HTML 模板中使用 <link> 元素正常加载它。
  • 所以“啊哈”时刻,我可以关闭 css-loader 并在 .css 文件中实现 content,但这对我来说似乎是一种解决方法......对于未来,我应该询问是否有可以在我的 SASS/SCSS 中执行此操作的设置。这可能吗?
  • ...如果没有别的,用于组织。我真的需要为单个 CSS 规则创建一个单独的文件以与相关样式分开吗?我可能会接受,但想知道这是否是唯一的方法。

标签: javascript css webpack sass


【解决方案1】:

我认为 Webpack 5 css-loader 默认解决了这个 url() 调用,你需要手动禁用它:

        loader: "css-loader",
        options: {
          // Add this option
          url: false,
        },

More in the docs

也许您的其他加载程序也有相同的选项,但我很确定您只需要为 css-loader 禁用它

【讨论】:

  • 当然很简单。我天真地尝试在sass-loader 和css-loader 中设置参数,结果出现错误。但是,一旦我只按照你说的做了,它就奏效了。我认为一个要点是,似乎不应期望它们具有类似的选项和配置,而是一个功能在另一个中是多余的,因为它们旨在串联使用。酷...谢谢!
  • 我应该补充一点,期待sass-loader 中出现该选项可能是我自己没有找到解决方案的原因。现在我明白了这个基础;两者不镜像或替换彼此的功能。
猜你喜欢
  • 2020-12-21
  • 2016-03-15
  • 2021-04-25
  • 2020-04-30
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 2021-09-20
相关资源
最近更新 更多