Angularjs 使用grunt构建的Angular应用程序中缺少资源
我已经使用Yeoman和AngularJS(以及所有与之相关的东西,如Grunt和Bower)构建了一个应用程序 当使用Angularjs 使用grunt构建的Angular应用程序中缺少资源,angularjs,gruntjs,yeoman,bower,Angularjs,Gruntjs,Yeoman,Bower,我已经使用Yeoman和AngularJS(以及所有与之相关的东西,如Grunt和Bower)构建了一个应用程序 当使用grunt-serve在本地运行时,这一切都非常有效。然而,在运行grunt并部署应用程序之后,有一些资产缺失,我不确定解决这个问题的最佳方法是什么 首先,运行Grunt似乎将图像复制到dist,但它在不调整CSS中的引用的情况下重命名它们app/images/uparrow.png变成dist/images/3f8464a.uparrow.png 下面是main.scss中的
grunt-serve
在本地运行时,这一切都非常有效。然而,在运行grunt并部署应用程序之后,有一些资产缺失,我不确定解决这个问题的最佳方法是什么
首先,运行Grunt似乎将图像复制到dist,但它在不调整CSS中的引用的情况下重命名它们app/images/uparrow.png
变成dist/images/3f8464a.uparrow.png
下面是main.scss中的一行:
.table.sortable th.sorted-asc { background-image: url(../images/uparrow.png); }
在构建过程中将其编译为CSS时,不会重写路径,因此浏览器会尝试加载缺少的dist/images/uparrow.png
其次,加载引导插件的字体有问题。app/bower\u components/bootstrap/dist/CSS/bootstrap.CSS中的引导CSS引用了。/font/glyphicons-halflings-regular.woff
。相对路径解析为app/bower\u components/bootstrap/dist/font/glyphicons halflings regular.wof
,这非常有效
但是,一旦构建完成,供应商CSS就会合并并缩小为一个CSS文件,位于dist/styles/8727a602.vendor.CSS
。但是字体的相对路径不会被重写。因此,它尝试在dist/font
文件夹中查找字体,而不是在文件实际所在的dist/bower\u components/bootstrap/dist/font/glyphions.wof
文件夹中查找字体
非常感谢您的建议。您在build
任务中遇到了一些尚未修复的错误。我相信没有干净的解决方案,所以这里有一些变通方法
首先,图像版本:
只需从rev
任务中删除图像,您就可以开始了
rev: {
dist: {
files: {
src: [
'<%= yeoman.dist %>/scripts/{,*/}*.js',
'<%= yeoman.dist %>/styles/{,*/}*.css',
// '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', <- remove that line
'<%= yeoman.dist %>/styles/fonts/*'
]
}
}
},
在这些更改之后再次运行grunt build
,它应该可以工作。我找到了一个解决CSS问题的好办法-SCSS内置了图像功能,这将自动重写到资产的路径:
.table.sortable th.sorted-asc { background-image: image-url('uparrow.png'); }
带根的cssmin选项替换所有相对路径
您可以在Gruntfile.js中停用cssmin的root选项
cssmin: {
options: {
//root: '<%= yeoman.app %>'
}
},
cssmin:{
选项:{
//根目录:“”
}
},
我遇到了完全相同的问题,我通过以下方法解决了它:
1。将bootstrat字体添加到复制任务中(在Grunfile中):
{
expand: true,
cwd: ‘src/main/webapp/bower_components/bootstrap/dist’,
src: ‘fonts/*’,
dest: ‘<%= yeoman.dist %>/assets/’
}
{
是的,
cwd:'src/main/webapp/bower_components/bootstrap/dist',
src:'font/*',
目的地:'/assets/'
}
这将复制dist/assests/fonts文件夹中的引导字体
2。删除cssmin任务或注释掉根参数。这将解决您在路径方面的问题
更多信息,请参见:我也有同样的问题grunt build
并没有将glyphicons文件复制到dist
文件夹中。您的字体解决方案非常成功,但是对于图像,解决方案是使用SASS函数包含图像,并且路径会自动在CSS中重写:.table.sortable th.sorted-asc{背景图像:图像url('uparrow.png');}是的,我知道,对于图像,我的解决方案只是一个短期解决方案,因为我现在不需要更好的解决方案,而且我没有时间……但我肯定会在稍后阶段研究您的解决方案。谢谢!这让我疯狂。值得注意的是,如果您要更改目的地位置,您可能还需要更新您的$icon font path
在main.scss
文件中的变量(这会导致grunt serve
fonts图标失败)。我最终对每个图标使用了以下命令。在main.scss中:$icon font path:“../bower_组件/sass引导/fonts/”在Grunfile.js:dest:'/bower_components/sass bootstrap/fonts/“,
看起来这个请求应该可以解决字体问题:。同时,我在使用bootstrap sass official:src:['bower_components/bootstrap sass official/vendor/assets/fonts/bootstrap/*.]这些东西很烦人。如果它们导致未解决的bug,为什么它们会出现在电流发生器中?那么,默认情况下,它们应该被关闭。Yeoman/grunt是非常好的工具,但这些东西让再次使用变得烦人:这对我来说很有用。显然Angular的grunt已经为你构建了一个sass的东西,而你是编写这个工具的人在CSS中引用图像时,Sass需要始终使用图像url
。
{
expand: true,
cwd: ‘src/main/webapp/bower_components/bootstrap/dist’,
src: ‘fonts/*’,
dest: ‘<%= yeoman.dist %>/assets/’
}