Grunt рассматривает папку с точкой как файл

При попытке скомпилировать мой файл grunt и встроить в мой dist папка для развертывания я получаю следующую ошибку в консоли:

Running "rev:dist" (rev) task
dist/public/app/app.js >> 63decaf3.app.js
dist/public/app/vendor.js >> a09756ab.vendor.js
dist/public/app/app.css >> d2017fc8.app.css
Warning: Unable to read "dist/public/bower_components/animate.css" file (Error code: EISDIR).

Причина этого в том, что у меня есть компонент bower, который я установил, с именем animate.css. Эта библиотека, конечно, установлена ​​в моем bower_components папку, но соответствующая строка в моем файле Grunt ищет только файлы с расширением .js, .css и так далее. Вот моя подходящая строка:

// Renames files for browser caching purposes
rev: {
  dist: {
    files: {
      src: [
        '<%= yeoman.dist %>/public/{,*/}*.js',
        '<%= yeoman.dist %>/public/{,*/}*.css',  // Offending line
        '<%= yeoman.dist %>/public/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
        '<%= yeoman.dist %>/public/assets/fonts/*'
      ]
    }
  }
}

А вот структура каталогов:

bower_components
  -> ...
  -> angular-ui-router
  -> animate.css  // Folder with the error
  ---> animate.css  // File that it should be recognizing
  ---> animate.min.css  // File that it should be recognizing
  -> es5-shim
  -> ...

В таком случае, как бы я сказал Гранту, что это каталог, в котором содержатся файлы, а не сам файл?

4 ответа

Решение

У меня немного другой подход.

bower install animate-css --save

он захватывает animate.css, но сохраняет в:

bower_components/animate-css

Используя этот метод, вам не нужно играть с Gruntfile.js, который я лично считаю неприятным редактировать и даже смотреть;)

Исключить animate.css папку, затем включите все внутри нее. Я не уверен в точных параметрах glob, см. Здесь, для деталей. Что-то вроде этого:

rev: {
  dist: {
    files: {
      src: [
        '<%= yeoman.dist %>/public/{,*/}*.js',
        '<%= yeoman.dist %>/public/{,*/}*.css',
        '!<%= yeoman.dist %>/public/bower_components/animate.css',
        '<%= yeoman.dist %>/public/bower_components/animate.css/animate.css',
        '<%= yeoman.dist %>/public/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
        '<%= yeoman.dist %>/public/assets/fonts/*'
      ]
    }
  }
}

Вы должны иметь возможность использовать пользовательскую функцию фильтра с методом fs.Stats. Кроме того, есть ext опция (Указывает, где находится период, обозначающий расширение.)

ext: String

src: [
     '<%= yeoman.dist %>/public/{,*/}*.js',
     '<%= yeoman.dist %>/public/{,*/}*.css',  // Offending line
     '<%= yeoman.dist %>/public/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
     '<%= yeoman.dist %>/public/assets/fonts/*'
     ],
     filter: 'isDirectory',

Вам может понадобиться использовать isFile в зависимости от того, хотите ли вы сопоставить только реальные файлы.

Пример использования isFile, сработал для меня.

// Renames files for browser caching purposes
filerev: {
  dist: {
    src: [
      '<%= yeoman.dist %>/**/*.js',
      '!<%= yeoman.dist %>/local.js',
      '!<%= yeoman.dist %>/web.js',
      '<%= yeoman.dist %>/styles/**/*.css',
      '<%= yeoman.dist %>/images/**/*.{png,jpg,jpeg,gif,webp,svg}',
      '<%= yeoman.dist %>/styles/fonts/*'
    ],
    filter: 'isFile'
  }
},
Другие вопросы по тегам