【问题标题】:laravel mix sass images not found/hashlaravel mix sass 图像未找到/散列
【发布时间】:2017-02-22 19:34:57
【问题描述】:

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

我有 1 个主要问题。 sass 文件(资源/资产/图像)中的所有图像都没有按照我的意愿进行编译。

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

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

在 (app.css) 中混入编译

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

因此,不是像我在我的 SASS 文件中那样将 url 编译为 css,而是将其编译为不同的东西,最后带有哈希。此外,在编译 sass 后,它会使用我在 SASS 文件中使用的图像生成图像映射。我的图像地图最初位于资源/资产/图像。

我不知道我做错了什么。我试图更改我的 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');

【问题讨论】:

    标签: css laravel sass laravel-mix


    【解决方案1】:

    我现在遇到了同样的问题。据我所知,最新的 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"
    },
    

    【讨论】:

    • 成功了!一个问题,该配置文件必须始终保留在根目录中吗?谢谢:)
    • 很好,原来“脚本”部分指向node_modules/laravel_mix/setup/webpack.config.js。因此,当您下次更新 laravel mix 时,您可能也希望将 webpack.config 文件更新为最新的。希望他们将来会删除这个操纵 URLS 的丑陋功能 - 如果是这种情况,您可以再次使用他们的配置文件。
    • 这是在 Laravel-mix 0.8.5 中修复的,你现在需要做的就是在 webpack.mix.js 中添加 processCssUrls: false
    • 你是我的救星!!!我不明白为什么 Laravel 会破坏它。它在抱怨找不到文件,但是如果它是一个url,为什么它需要找到它?
    • processCssUrls() 用于移动“源资产”,如图像、字体等,以便您可以将 scss url(..) 指向源资产,编译器会自动将这些资产移动到公共目录,对资产进行一些优化并修复 url,以便它们指向已编译的资产。所以不是说它坏了,如果有必要,它只是值得商榷。
    猜你喜欢
    • 2019-02-13
    • 2020-08-04
    • 2017-12-05
    • 2019-02-26
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2021-04-19
    相关资源
    最近更新 更多