Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
K
kpp
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Alexandr Veselov
kpp
Commits
2a0952c8
Commit
2a0952c8
authored
Feb 23, 2016
by
Nikolay Gromov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
components no test
parent
b91bf544
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
89 additions
and
39 deletions
+89
-39
TODO
TODO
+7
-1
gulpfile.js
gulpfile.js
+78
-37
test-component--modified.js
src/components/test-component/test-component--modified.js
+1
-0
global_additional-css.css
src/css/global_additional-css.css
+1
-0
global_script.js
src/js/global_script.js
+1
-0
style.less
src/less/style.less
+1
-1
No files found.
TODO
View file @
2a0952c8
☐ Разместить файлы покомпонентно, импортировать less в диспетчере подключений, парсить его и брать в сборку JS-файлы импортированных компонент.
☐ Разместить файлы покомпонентно, импортировать less в диспетчере подключений, парсить его и брать в сборку JS-файлы импортированных компонент
☐ Тестировать: сборку и обновление JS при изменении файлов
☐ Тестировать: сборку и обновление JS при изменении диспетчера подключений
☐ Тестировать: копирование добавочных CSS при изменении файлов
☐ Тестировать: копирование добавочных CSS при изменении файлов
☐ Тестировать: копирование изображений при изменении диспетчера подключений
☐ Тестировать: копирование изображений при изменении диспетчера подключений
☐ Сделать: Кнопка с иконкой
☐ Сделать: Кнопка с иконкой
☐ Сделать: Кнопка-иконка
☐ Сделать: Кнопка-иконка
...
...
gulpfile.js
View file @
2a0952c8
...
@@ -34,11 +34,12 @@ const isDev = !process.env.NODE_ENV || process.env.NODE_ENV == 'dev';
...
@@ -34,11 +34,12 @@ const isDev = !process.env.NODE_ENV || process.env.NODE_ENV == 'dev';
const
port
=
process
.
env
.
port
?
process
.
env
.
port
:
3000
;
const
port
=
process
.
env
.
port
?
process
.
env
.
port
:
3000
;
// Расположение папки с компонентами
// Расположение папки с компонентами
const
componentFolder
=
'./src/components/'
;
const
component
s
Folder
=
'./src/components/'
;
// Файлы компилируемых компонентов
let
components
=
getComponentsFiles
();
getComponentsFiles
();
console
.
log
(
'---------- Список добавочных js/css-файлов и адресов картинок для копирования'
);
console
.
log
(
components
);
...
@@ -69,7 +70,7 @@ gulp.task('less', function () {
...
@@ -69,7 +70,7 @@ gulp.task('less', function () {
// Копирование добавочных CSS, которые хочется иметь отдельными файлами
// Копирование добавочных CSS, которые хочется иметь отдельными файлами
gulp
.
task
(
'copy:css'
,
function
()
{
gulp
.
task
(
'copy:css'
,
function
()
{
console
.
log
(
'---------- копирование CSS'
);
console
.
log
(
'---------- копирование CSS'
);
return
gulp
.
src
(
'./src/css/*.css'
,
{
since
:
gulp
.
lastRun
(
'copy:css'
)})
return
gulp
.
src
(
components
.
css
,
{
since
:
gulp
.
lastRun
(
'copy:css'
)})
.
pipe
(
postcss
([
.
pipe
(
postcss
([
autoprefixer
({
browsers
:
[
'last 2 version'
]}),
autoprefixer
({
browsers
:
[
'last 2 version'
]}),
mqpacker
mqpacker
...
@@ -85,7 +86,7 @@ gulp.task('copy:css', function() {
...
@@ -85,7 +86,7 @@ gulp.task('copy:css', function() {
// Копирование и оптимизация изображений
// Копирование и оптимизация изображений
gulp
.
task
(
'img'
,
function
()
{
gulp
.
task
(
'img'
,
function
()
{
console
.
log
(
'---------- копирование и оптимизация картинок'
);
console
.
log
(
'---------- копирование и оптимизация картинок'
);
return
gulp
.
src
(
'./src/img/*.{jpg,jpeg,gif,png,svg}'
,
{
since
:
gulp
.
lastRun
(
'img'
)})
// только для изменившихся с последнего запуска файлов
return
gulp
.
src
(
components
.
img
,
{
since
:
gulp
.
lastRun
(
'img'
)})
// только для изменившихся с последнего запуска файлов
.
pipe
(
newer
(
'./build/img'
))
// оставить в потоке только изменившиеся файлы
.
pipe
(
newer
(
'./build/img'
))
// оставить в потоке только изменившиеся файлы
.
pipe
(
imagemin
({
.
pipe
(
imagemin
({
progressive
:
true
,
progressive
:
true
,
...
@@ -95,16 +96,16 @@ gulp.task('img', function () {
...
@@ -95,16 +96,16 @@ gulp.task('img', function () {
.
pipe
(
gulp
.
dest
(
'./build/img'
));
.
pipe
(
gulp
.
dest
(
'./build/img'
));
});
});
// Оптимизация изображений для форм
//
TEMP:
Оптимизация изображений для форм
gulp
.
task
(
'img:form'
,
function
()
{
//
gulp.task('img:form', function () {
console
.
log
(
'---------- Оптимизация картинок для компонента форм'
);
//
console.log('---------- Оптимизация картинок для компонента форм');
return
gulp
.
src
(
'./src/img/form_field_bg/*.svg'
)
//
return gulp.src('./src/img/form_field_bg/*.svg')
.
pipe
(
imagemin
({
//
.pipe(imagemin({
progressive
:
true
,
//
progressive: true,
svgoPlugins
:
[{
removeViewBox
:
false
}],
//
svgoPlugins: [{removeViewBox: false}],
}))
//
}))
.
pipe
(
gulp
.
dest
(
'./src/img/form_field_bg'
));
//
.pipe(gulp.dest('./src/img/form_field_bg'));
});
//
});
// Сборка SVG-спрайта
// Сборка SVG-спрайта
gulp
.
task
(
'svgstore'
,
function
()
{
gulp
.
task
(
'svgstore'
,
function
()
{
...
@@ -141,10 +142,7 @@ gulp.task('html', function() {
...
@@ -141,10 +142,7 @@ gulp.task('html', function() {
// Конкатенация и углификация Javascript
// Конкатенация и углификация Javascript
gulp
.
task
(
'js'
,
function
()
{
gulp
.
task
(
'js'
,
function
()
{
console
.
log
(
'---------- обработка Javascript'
);
console
.
log
(
'---------- обработка Javascript'
);
return
gulp
.
src
([
return
gulp
.
src
(
components
.
js
)
// Последовательность конкатенации
'./src/js/script.js'
])
.
pipe
(
debug
({
title
:
"JS:"
}))
.
pipe
(
debug
({
title
:
"JS:"
}))
.
pipe
(
gulpIf
(
isDev
,
sourcemaps
.
init
()))
.
pipe
(
gulpIf
(
isDev
,
sourcemaps
.
init
()))
.
pipe
(
concat
(
'script.min.js'
))
.
pipe
(
concat
(
'script.min.js'
))
...
@@ -208,34 +206,77 @@ gulp.task('default',
...
@@ -208,34 +206,77 @@ gulp.task('default',
// Определение собираемых компонентов
// Определение собираемых компонентов
function
getComponentsFiles
()
{
function
getComponentsFiles
()
{
console
.
log
(
'---------- получение списка компонентов'
);
// Создаем объект для списка файлов компонентов
// Создадим переменную-объект, куда потом запишем результат
let
с
omponentsFilesList
=
{
let
с
omponentsList
=
{};
js
:
[],
// тут будут JS-файлы компонент в том же порядке, в котором подключены less-файлы
img
:
[],
// тут будет массив из «путь_до_компонента/img/*.{jpg,jpeg,gif,png,svg}» для всех импортируемых компонент
css
:
[],
// тут будут CSS-файлы компонент в том же порядке, в котором подключены less-файлы
};
// Читаем файл диспетчера подключений
// Читаем файл диспетчера подключений
let
connectManager
=
fs
.
readFileSync
(
'./src/less/style.less'
,
'utf8'
);
let
connectManager
=
fs
.
readFileSync
(
'./src/less/style.less'
,
'utf8'
);
// Фильтруем массив, оставляя только строки с незакомментированными импортами
// Фильтруем массив, оставляя только строки с незакомментированными импортами
let
fileSystem
=
connectManager
.
split
(
'
\
n'
).
filter
(
function
(
item
)
{
let
fileSystem
=
connectManager
.
split
(
'
\
n'
).
filter
(
function
(
item
)
{
if
(
/^@import/
.
test
(
item
))
return
true
;
if
(
/^
(\s
*
)
@import/
.
test
(
item
))
return
true
;
else
return
false
;
else
return
false
;
});
});
// Обойдём массив и запишем его части в объект результирующей переменной
// Обойдём массив и запишем его части в объект результирующей переменной
fileSystem
.
forEach
(
function
(
item
,
i
)
{
fileSystem
.
forEach
(
function
(
item
,
i
)
{
// Попробуем вычленить компонент из строки импорта
// Попробуем вычленить компонент из строки импорта
let
componentData
=
/
\/
components
\/(
.+
?)(\/)
/g
.
exec
(
item
);
let
componentData
=
/
\/
components
\/(
.+
?)(\/)(
.+
?)(?=
.
(
less|css
))
/g
.
exec
(
item
);
// console.log(componentData);
// Если это компонент и получилось извлечь имя файла
// Если это компонент
if
(
componentData
!==
null
&&
componentData
[
3
])
{
if
(
componentData
!==
null
)
{
// Название компонента (название папки)
// Дописываем в объект название компонента
let
componentName
=
componentData
[
1
];
if
(
!
с
omponentsList
[
componentData
[
1
]])
{
// Имя подключаемого файла без расширения
с
omponentsList
[
componentData
[
1
]]
=
''
;
let
componentFileName
=
componentData
[
3
];
// Имя JS-файла, который нужно взять в сборку в этой итерации, если он существует
let
jsFile
=
componentsFolder
+
componentName
+
'/'
+
componentFileName
+
'.js'
;
// Имя CSS-файла, который нужно взять в сборку в этой итерации, если он существует
let
cssFile
=
componentsFolder
+
componentName
+
'/'
+
componentFileName
+
'.css'
;
// Если существует JS-файл — берём его в массив
if
(
fileExist
(
jsFile
))
{
с
omponentsFilesList
.
js
.
push
(
jsFile
);
}
// Если существует CSS-файл — берём его в массив
if
(
fileExist
(
cssFile
))
{
с
omponentsFilesList
.
css
.
push
(
cssFile
);
}
}
// Берём в массив изображения
с
omponentsFilesList
.
img
.
push
(
componentsFolder
+
componentName
+
'/*.{jpg,jpeg,gif,png,svg}'
);
}
}
});
});
console
.
log
(
с
omponentsList
);
// Добавим глобальный JS-файл в начало массива с обрабатываемыми JS-файлами
if
(
fileExist
(
'./src/js/global_script.js'
))
{
с
omponentsFilesList
.
js
.
unshift
(
'./src/js/global_script.js'
);
}
// Добавим глобальный CSS-файл в начало массива с обрабатываемыми CSS-файлами
if
(
fileExist
(
'./src/css/global_additional-css.css'
))
{
с
omponentsFilesList
.
css
.
unshift
(
'./src/css/global_additional-css.css'
);
}
// Добавим глобальные изображения
с
omponentsFilesList
.
img
.
unshift
(
'./src/img/*.{jpg,jpeg,gif,png,svg}'
);
с
omponentsFilesList
.
img
=
uniqueArray
(
с
omponentsFilesList
.
img
);
return
с
omponentsFilesList
;
}
// Проверка существования файла и его размера (размер менее 2байт == файла нет)
function
fileExist
(
path
)
{
const
fs
=
require
(
'fs'
);
try
{
fs
.
statSync
(
path
);
if
(
fs
.
statSync
(
path
).
size
>
1
)
return
true
;
else
return
false
;
}
catch
(
err
)
{
return
!
(
err
&&
err
.
code
===
'ENOENT'
);
}
}
// Если в строке были указаны дополнительные файлы (комментарием в конце строки, по форме // add[addFile1.js, megafile.js] )
// Оставить в массиве только уникальные значения (убрать повторы)
// let componentAdditionalFiles = /add\[(.+)\]/g.exec(item);
function
uniqueArray
(
arr
)
{
// console.log(componentAdditionalFiles);
var
objectTemp
=
{};
// Вернем объект со списком собираемых JS-файлов и копируемых изображений
for
(
var
i
=
0
;
i
<
arr
.
length
;
i
++
)
{
// return ComponentsList;
var
str
=
arr
[
i
];
objectTemp
[
str
]
=
true
;
// запомнить строку в виде свойства объекта
}
return
Object
.
keys
(
objectTemp
);
}
}
src/components/test-component/test-component--modified.js
0 → 100644
View file @
2a0952c8
alert
(
'Тестовый компонент - модификатор'
);
src/css/global_additional-css.css
0 → 100644
View file @
2a0952c8
src/js/global_script.js
0 → 100644
View file @
2a0952c8
alert
(
'глобальный скрипт'
);
src/less/style.less
View file @
2a0952c8
...
@@ -19,6 +19,6 @@
...
@@ -19,6 +19,6 @@
// @import "blocks/field-actions.less";
// @import "blocks/field-actions.less";
@import (less) "../components/test-component/test-component.less";
@import (less) "../components/test-component/test-component.less";
@import "../components/test-component/test-component--modified.less";
// add[addFile1.js, megafile.js]
@import "../components/test-component/test-component--modified.less";
@import "../components/second-component/second-component.less";
@import "../components/second-component/second-component.less";
@import "global_grid.less";
@import "global_grid.less";
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment