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'
}
},