如何不使用 Webpack 解析路径?

saa*_*ann 6 javascript require reactjs webpack

我正在使用 Webpack 和sass-loadercss-loaderurl-loader开发 ReactJs 项目。

我不想解析字体路径并保持它在 SASS 文件中的设置。

问题:

如果我调用绝对路径(即:http://fonts.com/my-font.eot/path/to/my-font.eot),则路径不会解析。

但是,如果我使用相对路径(即:my-font.eotpath/to/my-font.eot),url-loader会尝试解析该路径。

就我而言,我需要使用相对路径(即使它生成 404 错误)。

我尝试过的:

我尝试排除url-loader中的所有字体扩展名,但 Webpack 不知道如何处理此类文件,即使该文件可能不存在。

这是我得到的错误:

模块解析失败:C:....\fonts\my-font.eot 意外字符 ' ' (1:1) 您可能需要适当的加载程序来处理此文件类型。



我还尝试禁用 css-loader 的“url”选项,但绝对没有任何反应。我想我很有可能没有正确添加该选项:

{
    test: /\.scss$/,
    loaders: ["style-loader", "css-loader", "sass-loader"],
    options: { url: false }
},
Run Code Online (Sandbox Code Playgroud)



这是我当前的代码:

module: {
    loaders: [
      {
        exclude: [
          /\.html$/,
          /\.(js|jsx)$/,
          /\.css$/,
          /\.scss$/,
          /\.json$/,
          /\.svg$/
        ],
        loader: 'url',
        query: {
          limit: 10000,
          name: 'path/dist/[name].[hash:8].[ext]'
        }
      },
      {
        test: /\.scss$/,
        loaders: ["style-loader", "css-loader", "sass-loader"]
      },
      ...
    ]
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

小智 5

这个问题可能有点老了,但我还是想纠正一下答案。

当您想使用数组语法时,您基本上可以为每个加载器定义所有选项。为此,您必须在数组中使用一个对象作为加载器。所以而不是

{
    test: /\.scss$/,
    loaders: ["style-loader", "css-loader", "sass-loader"],
    options: { url: false }
},
Run Code Online (Sandbox Code Playgroud)

你必须写

{
    test: /\.scss$/,
    loaders: [
         "style-loader", 
         {
            loader:'css-loader',
            options: {
                 url: false
            }
         },
         "sass-loader"],

},
Run Code Online (Sandbox Code Playgroud)


saa*_*ann 0

我找到了解决方案。我没有正确添加css-loader选项。

因为我没有找到直接使用数组语法添加选项的方法,所以我不得不切换到字符串语法。


此代码不起作用:

{
    test: /\.scss$/,
    loaders: ["style-loader", "css-loader", "sass-loader"],
    options: { url: false }
},
Run Code Online (Sandbox Code Playgroud)


这段代码的工作原理:

{
    test: /\.scss$/,
    loader: 'style!css?url=false!sass'
}
Run Code Online (Sandbox Code Playgroud)