之前寫了一篇vue文件怎么使用的文章,有人問我怎么在css文件中使用public下的文件,這是個好問題,因為我之前都沒有研究過
需要解決的2個問題
一開始按照vue文件的使用方式(https://www.cnblogs.com/wzcsqaws/p/11283228.html)試了一下,總結了下主要有2個問題,
- webpack解析不到你寫的文件路徑,控制台直接報錯
- 如何把你的publicPath,放到css中
解決第1個問題 僅僅針對public目錄圖片如何在css使用,這一步可以不要,直接看解決第二個問題就能實現,當然也可以了解一下
webpack處理css大概是這樣子
根據webpack圖片上的注釋,問題定位在css-loader上,是它把css解析CommonJS,讀取url解析不到然后報錯,那我們就看一下css-loader文檔看看
有沒有解決辦法,
文檔上有寫,可以在配置里面添加一個url方法,簡單判斷在某個文件夾下,就可以不解析這個url了,不解析自然控制台就不報錯了
解決第2個問題 url使用字符串拼接完整
為了兼容原生,原本打算使用css變量加calc實現,奈何無法實現,只能退一步使用sass,讓文件在sass-loader的時候把圖片完整url拼接完成
寫了個簡單的例子
這樣就可以使用了,但是這么寫很麻煩,每個文件都要加變量或者引入變量不利於管理,而且還要跟process.env.BASE_URL掛鈎對吧
sass-loader有一個參數是默認加全局sass文件或者全局參數的,這正是我需要的
這里是在vuecli中使用簡化的配置來導入全局變量的文件,這樣就可以只寫一遍,不過還不夠,我還想要與process.env.BASE_URL掛鈎
看了sass-loader配置,發現prependData可以以方法的方式使用,我們可以在這里判斷是何種環境然后定義變量為不同的值,問題完美解決啦
問一問,有沒有人能用原生解決問題的,求告知~