【问题标题】:Yeoman vendor images paths are incorrect when building the application构建应用程序时 Yeoman 供应商图像路径不正确
【发布时间】:2013-04-24 16:14:15
【问题描述】:

我正在使用 Yeoman 开发一个 AngularJS 应用程序。

该应用程序依赖于与 Bower 一起安装的 jQuery UI。这就是我包含 jQuery UI 主题的方式:

<!-- build:css styles/plugins.css -->
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.core.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.accordion.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.autocomplete.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.button.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.datepicker.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.dialog.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.menu.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.progressbar.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.resizable.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.selectable.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.slider.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.spinner.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.tabs.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.tooltip.css" />
<link rel="stylesheet" href="components/jquery.ui/themes/base/jquery.ui.theme.css" />
<!-- endbuild -->

在构建应用程序时,一切顺利,没有错误。

但是,在浏览器控制台(使用 Chrome)中,我可以看到无法找到 jQuery UI Datepicker 所需的图像,因为它看起来在 styles/images/ 内部,而它们实际上在 components/... 内部。

截图

我的第一个想法是在 CSS 中覆盖 jQuery UI 图像路径,但这似乎不是最好的解决方案。示例:

原始样式

.ui-state-error .ui-icon,
.ui-state-error-text .ui-icon {
    background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/;
}

我的覆盖

.ui-widget-header .ui-state-error {
    background-image: url(../components/jquery.ui/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png);
}

有推荐的解决方案吗?

【问题讨论】:

    标签: yeoman gruntjs bower


    【解决方案1】:

    我遇到了同样的问题。但我没有更改 jQuery CSS(这可能对未来的更新有害......),而是调整了 grunt 脚本 (Gruntfile.js) 中的“imagemin”任务,以便将图像复制到预期的位置。只要 grunt 负责修改缩小后的 css 中的图像路径,任何第三方库都是如此。

    这是我所做的更改​​(请注意我的jQuery UI主题文件夹位于app\styles文件夹下)

    之前:

    imagemin : {
        dist : {
            files : [{
                    expand : true,
                    cwd : '<%= yeoman.app %>/images',
                    src : '{,*/}*.{png,jpg,jpeg}',
                    dest : '<%= yeoman.dist %>/images'
                }
            ]
        }
    }
    

    之后:

    imagemin : {
        dist : {
            files : [{
                    expand : true,
                    cwd : '<%= yeoman.app %>/images',
                    src : '{,*/}*.{png,jpg,jpeg}',
                    dest : '<%= yeoman.dist %>/images'
                }, {
                    expand : true,
                    flatten : true,
                    cwd : '<%= yeoman.app %>/styles',
                    src : '**/*.{png,jpg,jpeg,gif}',
                    dest : '<%= yeoman.dist %>/styles/images'
                }
            ]
        }
    }
    

    希望这会有所帮助!

    【讨论】:

    • 它对我很有用,修改路径以在“bower_components”下分发图像。
    • @Fernando 您刚刚将样式目录更改为 bower_components 吗?
    • @grant,就我而言,我将app/bower_components 下的所有图像复制到dist/styles/images。由于合并的 CSS 位于 dist/styles 中,这意味着 CSS 中对 images/someimage 的引用将在分发包中起作用。见this gist。
    • @FernandoCorreia 我明白了,谢谢。尽管您必须在每次构建后手动执行此操作,对吗?
    • @grant No. 代码在Gruntfile.js,这是grunt的配置文件。因此,每次我为分发构建(使用grunt 命令)时,都会根据配置复制文件。在开发过程中,我的 index.html 文件直接从 bower_components 目录中引用资产,在 build: 标记内,因此它们被 grunt 打包。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    相关资源
    最近更新 更多