Laravel Mix未找到Sass图片/哈希值。

9

我第一次使用 Laravel。在 5.4 版本中,他们引入了 Laravel Mix。我尝试将我用 gulp 编译的静态网站的 SASS 粘贴到资源文件夹中的 sass 文件中。这一切都很顺利,我的 SASS 将被编译到公共地图中的 app.css 文件中。

我有一个主要问题。SASS 文件(resources/assets/images) 中的所有图片没有像我希望的那样编译。

SASS 文件中的代码 (resources/assets/SASS/banners.scss)

section.module.parallax-1 {
  background-image: url('../images/banner1.jpg');
}

使用Mix编译(app.css)

section.module.parallax-1 {
  background-image: url(/images/banner1.jpg?ef4f135bad144d886f07c8b65f757a85);
}

所以,与我在SASS文件中编译url到css不同,它将其编译为带有哈希结尾的不同内容。此外,在编译SASS后,它会生成一个图像映射,其中包含我在SASS文件中使用的图像。我的图像映射最初位于resources / assets / images。

我不知道我做错了什么。我尝试更改SASS文件中的url,但这没有帮助。是否有人可以帮我解决?或者有其他解决方案吗?
webpack.mix代码/ js
const mix  = require('laravel-mix');

mix.js('resources/assets/js/app.js', 'public/js')
   .sass('resources/assets/sass/app.scss', 'public/css');
1个回答

15

我现在遇到了同样的问题。据我所知,在最新版本的laravel mix中,这种情况不再存在了。但由于它还没有在npmjs上更新,你可以使用以下解决方法:

在webpack.mix.js中添加:

mix.options({
  processCssUrls: false // Process/optimize relative stylesheet url()'s. Set to false, if you don't want them touched.
});

请将 node_modules/laravel_mix/setup/webpack.config.js 复制到您的根目录中(与 webpack.mix.js 相同的位置)。
在新的 webpack.config.js 文件中找到并删除以下字符串: { loader: 'resolve-url-loader' + sourceMap }, 完成后,您需要更新 npm 脚本以使用您的 webpack.config.js 文件。
在您的 package.json 中,请使用以下脚本。
"scripts": {
    "dev": "node node_modules/cross-env/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules",
    "watch": "node node_modules/cross-env/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules",
    "hot": "node node_modules/cross-env/bin/cross-env.js NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot",
    "production": "node node_modules/cross-env/bin/cross-env.js NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules"
},

成功啦!还有一个问题,配置文件必须一直保留在根目录吗?谢谢 :) - Giesburts
1
很好,最初的“scripts”部分指向node_modules/laravel_mix/setup/webpack.config.js。因此,下次更新laravel mix时,您可能还想将webpack.config文件更新到最新版本。希望他们将来会删除这个丑陋的功能,该功能会操纵URLS - 如果是这种情况,您可以再次使用他们的配置文件。 - oBo
这个问题已在 Laravel-mix 0.8.5 中得到解决。现在你只需要在 webpack.mix.js 中添加 processCssUrls: false 即可。 - oBo
你是我的救星!!!我不明白为什么Laravel会出问题。它一直在抱怨找不到文件,但如果这是一个URL,为什么需要找到它呢? - kiradotee
processCssUrls() 用于移动“源资产”,如图像、字体等,以便您可以将 scss url(..) 指向您的源资产,编译器会自动将这些资产移动到公共目录,并对资产进行一些优化,同时修复 URL,使其指向已编译的资产。因此,它并不是出了问题,只是有争议是否必要。 - oBo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接