7

我目前正在为我们的项目设置grunt-usemin,但我正在运行该cssmin任务的一个小问题。

我们的项目依赖于一些外部库,其中一些会带来很长的一些额外资源(如图像或字体)。问题是这些库没有相同的文件夹结构。

这是不同文件夹结构的示例

lib
|--lib1
|   |--style1.css
|   +--image1.png
+--lib2
   |--styles
   |   +--style2.css
   +--images
       +--image2.png

在 index.html 中,所有样式表都被引用并放在构建块中。因此,当 usemin 任务执行时,库的样式表被连接到一个缩小的文件中,并放在输出文件夹中。相应的资产(图像)也将复制到此输出文件夹并在img文件夹中展平。输出文件夹结构看起来像

out
|--allstyles.min.css
|--image1.png
+--image2.png

您可以猜到,串联的样式表(在本例中)有两个不同的相对 URI:

  • image1.png
  • ..\images\image2.png

这会导致无法找到某些图像的问题。我需要一个解决方案来将所有相对 URI 重新定位到 out 文件夹。我尝试使用任务的targetandroot选项,cssmin但无济于事。有人可以为我指出此任务的正确配置或另一个可以实现我正在寻找的 Grunt 任务吗?

提前致谢!

4

2 回答 2

2

我有一个 grunt 文件C:\web\project和一个 CSS 文件C:\web\project\www\css。以下片段来自我的 grunt 文件,它为我正确地重新设置了 URL。

var cssFiles = [
      'www/css/layout/Header.css',
      'www/css/layout/Footer.css',
      'www/css/vendor/chosen/chosen.css'
      // ...
];

cssmin: {
        concat: {
                options: {
                        keepBreaks: true, //  whether to keep line breaks (default is false)
                        debug: true, // set to true to get minification statistics under 'stats' property (see test/custom-test.js for examples)
                        noAdvanced: true, // set to true to disable advanced optimizations - selector & property merging, reduction, etc.
                        //relativeTo: 'http://online-domain-tools.com/'
                        noRebase: false, // whether to skip URLs rebasing
                        root: 'www'
                },
                nonull: true,
                src: cssFiles,
                dest: 'www/temp/application.css'
        },
        minify: {
                options: {},
                nonull: true,
                src: ['www/temp/application.css'],
                dest: 'www/temp/application.min.css'
        }
},

// ...

grunt.registerTask('default', ['cssmin:concat', 'cssmin:minify']);

你可以发布你的 gruntfile 来比较它吗?

相关阅读: https ://stackoverflow.com/a/21415649/99256

于 2014-07-20T07:30:14.453 回答
2

查看 cssmin 文档/选项:

  • rebase:设置为 false 以跳过 URL 变基

这解决了这个问题。

于 2015-02-11T13:42:40.153 回答