GULP - Как реализовать сборку
О себе: только начинаю курить тему про node и gulp... никогда не пользовался всякими штуками типа jade и т.п.
Я не прошу писать за меня код - прошу подсказать плагины/модули для gulp. Дальше сам разберусь Есть проект с определенной структурой: |-js/ |-сss/ |-media/ -картинки видео и т.п. |-index_01.html |-index_02.html |-index_03.html в каждом из html файлов подключены разные js и css файлы задача: 1. положить каждый html файл в свою папку с именем 01, 02 и тд... 2. создать подпапки для js и css файлов и положить их туда, 3. создать подпапку media в которой будут лежать только те файлы, которые упоминаются в конкретном html файле или его js/css файлах (при необходимости поправить пути) 4. добавить в каждую папку 01, 02 и тд txt файл с описанием взятым из из массива или объекта 5. сложить все в папку dist/01... 02 и тд 6. зазиповать папки 01... 02 и тд (зипы положить рядом) должно получиться: 01 |-js/ |-сss/ |-media/ -картинки видео и т.п. |-index.html |-sample.txt 02 |-js/ |-сss/ |-media/ -картинки видео и т.п. |-index.html |-sample.txt ... как вижу реализацию: 1. можно через FS прочитать все файлы корня и для каждого имени с .html запустить функцию/таск с gulp.src('index_01.htm') и т.д. 2. думаю можно использовать gulp-useref предварительно разметив исходные index_01.html и т.п. файлы 3. хз чем проанализировать html, css, js файлы на наличие ссылок на media-файлы 4. здесь я полагаю нужно использовать метод FS самого node читать массив и писать 5. как сделать gulp.dest('dist/01') и тд понятно... 6. видимо gulp-zip после того как пункты 1-5 выполнены Пункты 4 и 6 наверное можно сделать отдельными тасками и выполнять после... Я не стал писать про всякие минификаторы и оптимизаторы типа gulp-autoprefixer - но конечно они будут... Так-же интересует можно ли содержимое body моих html обернуть в div c определенными свойствами и т.п. Буду очень рад если поможете советом. |
SlavetZ,
1. А если у тебя 50 .html ты тоже собрался вручную прописывать gulp.src для каждого? По путям и ссылкам посмотри и попробуй вот эти фигни: https://www.npmjs.com/package/gulp-search https://github.com/cgross/gulp-dom-src https://www.npmjs.com/package/gulp-html-src 2. это какой-то копипаст? или подпапки должны быть в папках c .html? 3. подпапка media там же валяется? 4. уточняй, что за объект или массив 5. ну понятно тебе вроде 6. аналогично На будущее, чтобы не обкакаться с левыми плагинами https://github.com/gulpjs/plugins/bl...blackList.json |
Цитата:
var gulp = require('gulp'); var fs = require('fs'); var rename = require("gulp-rename"); gulp.task('default', function() { fs.readdir('/mydir', function(err, files) { files.forEach(function (file) { if (file.indexOf('.html') != -1) { goNext(file); } }); }); }); function goNext (file) { var newName = file.replace('.html',''); return gulp.src(file) .pipe(rename("index.html")) .pipe(gulp.dest('dist/'+newName)); } Цитата:
Цитата:
|
Урра! наговнокодил и оно работает...
Ищу упоминания файлов в html-ке, потом в тех файлах которые упоминались в html-ке и раскладываю их как нужно... для этого использую RegExp и читаю файлы по строкам на предмет соответствия имен файлов определенным типам Подскажите пожалуйста можно оптимизировать эту часть кода? //Список принадлежности файлов //Используется при gulp.dest и в создании RegExp var imageList = ['*.png','*.gif','*.jpg','*.jpeg','*.svg']; var cssList = ['*.css']; var jsList = ['*.js','*.json']; var pdfList = ['*.pdf']; var videoList = ['*.mp4','*.ogv','*.webm']; var fontsList = ['*.otf','*.ttf','*.woff','*.eot','*.svg']; //Список принадлежности в строку вида png|gif|jpg|jpeg|svg для RegExp //преобразования всех переменных однотипные... код нужно оптимизировать var imageString = imageList.toString().replace(/(\'|\"|\*|\.)/gim, '').replace(/\,/gim, '|'); var cssString = cssList.toString().replace(/(\'|\"|\*|\.)/gim, '').replace(/\,/gim, '|'); var jsString = jsList.toString().replace(/(\'|\"|\*|\.)/gim, '').replace(/\,/gim, '|'); var pdfString = pdfList.toString().replace(/(\'|\"|\*|\.)/gim, '').replace(/\,/gim, '|'); var videoString = videoList.toString().replace(/(\'|\"|\*|\.)/gim, '').replace(/\,/gim, '|'); var fontsString = fontsList.toString().replace(/(\'|\"|\*|\.)/gim, '').replace(/\,/gim, '|'); //Базовое выражение RegExp для поиска файлов в строках var baseReg = (/((?:((?:[^\(\\\'\"\r\n\t\f\/ ])*)\.(?:(filenames)\b)))/gim).toString().replace(/(^\/|\/gim)/gim, ''); //Выражение RegExp для поиска файлов в строках по списку принадлежности //преобразования всех переменных однотипные... код нужно оптимизировать var imageReg = new RegExp(baseReg.replace('filenames', imageString), 'gim'); var cssReg = new RegExp(baseReg.replace('filenames', cssString), 'gim'); var jsReg = new RegExp(baseReg.replace('filenames', jsString), 'gim'); var pdfReg = new RegExp(baseReg.replace('filenames', pdfString), 'gim'); var videoReg = new RegExp(baseReg.replace('filenames', videoString), 'gim'); var fontsReg = new RegExp(baseReg.replace('filenames', fontsString), 'gim'); |
вот тупанул ;) сделал так
//Список принадлежности файлов //Используется при gulp.dest и в создании RegExp var imageList = ['*.png','*.gif','*.jpg','*.jpeg','*.svg']; var cssList = ['*.css']; var jsList = ['*.js','*.json']; var pdfList = ['*.pdf']; var videoList = ['*.mp4','*.ogv','*.webm']; var fontsList = ['*.otf','*.ttf','*.woff','*.eot','*.svg']; //Выражение RegExp для поиска файлов в строках по списку принадлежности var imageReg = objToRegExp(imageList); var cssReg = objToRegExp(cssList); var jsReg = objToRegExp(jsList); var pdfReg = objToRegExp(pdfList); var videoReg = objToRegExp(videoList); var fontsReg = objToRegExp(fontsList); function objToRegExp(obj){ //Базовое выражение RegExp для поиска файлов в строках var baseReg = (/((?:((?:[^\(\\\'\"\r\n\t\f\/ ])*)\.(?:(filenames)\b)))/gim).toString().replace(/(^\/|\/gim)/gim, ''); //Список принадлежности в строку вида png|gif|jpg|jpeg|svg для RegExp var string = obj.toString().replace(/(\'|\"|\*|\.)/gim, '').replace(/\,/gim, '|'); //Выражение RegExp var regexp = new RegExp(baseReg.replace('filenames', string), 'gim'); return regexp; } |
Часовой пояс GMT +3, время: 16:54. |