簡體   English   中英

css-loader無法解析文件加載器生成的URL

[英]css-loader can not resolve urls generated by file-loader

我有共享的組件npm軟件包項目,該項目公開了組件和css文件。 CSS文件是使用webpack和url / file-loader構建的,用於解析字體。 我可以成功構建該項目,並且最終的CSS如下所示:

@font-face {
  font-family: 'MyFont';
  src: url(cf871bb3514694d3252ee1d23f71dd6c.woff2);
}

問題是當我嘗試從另一個使用webpack和css-loader的項目中使用此css時,css-modules已打開(modules:true),css-loader無法解析生成的url:

Module not found: Error: Can't resolve 'cf871bb3514694d3252ee1d23f71dd6c.woff2'

如果我將網址更改為:

url(./cf871bb3514694d3252ee1d23f71dd6c.woff2);

然后就可以了。

另外,如果我設置modules:false那么即使沒有./正常工作

因此,看起來像已打開css-modules的css-loader希望url路徑作為帶有./的節點相對路徑,而不僅僅是文件名。

源文件中的url看起來像:

url('../assets/fonts/Myfont.woff2');

有辦法解決嗎?

看來您通常無法在webpack中禁用Node.js樣式的解析。 但是,您可以使用NormalModuleReplacementPlugin干預模塊請求,並像相對路徑一樣動態地解決它們。

以下webpack配置調整應該可以解決問題:

const webpack = require('webpack')
const path = require('path')

module.exports = {
  //...
  plugins: [
    // RegEx matches all requests neither starting with a dot nor a slash
    new webpack.NormalModuleReplacementPlugin(/^[^./]/, resource => {
      // Override the original request
      resource.request = path.resolve(resource.context, resource.request)
    })
  ]
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM