-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.js
158 lines (134 loc) · 7.88 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
const path = require("path");
/**
* Config init
*
* @param projectPath
* @returns {{localComponentsPath: string, vendorCssFile: string, vendorJsFile: string, srcPath: string, vendorCssSrc: Array, nodePath: string, rootPath: *, vendorCssDest: string, componentsPath: string, assetsPath: string, devMode: boolean, vendorJsSrc: Array, browserSyncFiles: any[], vendorJsDest: string, browserSyncHost: string, fontFiles: Array}}
*/
const config = (projectPath, siteUrl) => {
const rootPath = projectPath; // Каталог проекта
const srcPath = path.join(rootPath, "src"); // Каталог с исходниками
const assetsPath = path.join(rootPath, "assets"); // Каталог со статическими ресурсами
const componentsPath = path.join(rootPath, "components"); // Каталог шаблонов компонент
const localComponentsPath = path.join(rootPath, "../../components"); // Каталог локальных компонент (!!! не опечатка - для выхода из каталога темы)
const nodePath = path.join(rootPath, "node_modules"); // Каталог node модулей
return {
devMode: true, // Режим разработки по-умолчанию
rootPath: rootPath, // Каталог проекта
srcPath: srcPath, // Каталог с исходниками
assetsPath: assetsPath, // Каталог со статическими ресурсами
componentsPath: componentsPath, // Каталог шаблонов компонент
localComponentsPath: localComponentsPath, // Каталог локальных компонент
nodePath: nodePath, // Каталог node модулей
vendorCssFile: "vendor.css", // Имя файла сборки CSS библиотек
vendorCssDest: path.join(assetsPath, "css"), // Расположение файла сборки CSS библиотек
vendorCssSrc: [path.join(__dirname, "dummy", "dummy.css")], // Массив подключаемых библиотек CSS
vendorJsFile: "vendor.js", // Имя файла сборки JS библиотек
vendorJsDest: path.join(assetsPath, "js"), // Расположение файла сборки JS библиотек
vendorJsSrc: [path.join(__dirname, "dummy", "dummy.js")], // Массив подключаемых библиотек JS
browserSyncHost: typeof siteUrl == "undefined" ? "http://localhost" : siteUrl,
browserSyncFiles: [
path.join(rootPath, "*.php"),
path.join(rootPath, "**/*.php"),
path.join(rootPath, "**/.*/*.php"),
path.join(rootPath, "**/.*/**/*.php"),
path.join(rootPath, "*.css"),
// path.join(assetsPath, "css/*.css"),
// path.join(componentsPath, "**/*.css"),
// path.join(componentsPath, "**/.*/*.css"),
// path.join(componentsPath, "**/.*/**/*.css"),
//
// path.join(assetsPath, "js/*.js"),
// path.join(componentsPath, "**/*.js"),
// path.join(componentsPath, "**/.*/*.js"),
// path.join(componentsPath, "**/.*/**/*.js"),
"!" + srcPath,
"!" + nodePath
],
fontFiles: [path.join(__dirname, "dummy", "dummy.ttf")] // Массив источников файлов шрифтов для переноса в каталог ресурсов темы оформления
};
};
const rq = (module_name, projectPath, useProjectPath) => {
return require(useProjectPath === true ? path.join(projectPath, "node_modules", module_name) : module_name);
};
const initGlobal = (projectPath, siteUrl, useProjectPath) => {
global.mbx = {
config: config(projectPath, siteUrl),
gulp: rq("gulp", projectPath, useProjectPath),
path: rq("path", projectPath, useProjectPath),
sass: rq("gulp-sass", projectPath, useProjectPath),
sourcemaps: rq("gulp-sourcemaps", projectPath, useProjectPath),
cssnano: rq("gulp-cssnano", projectPath, useProjectPath),
autoprefixer: rq("gulp-autoprefixer", projectPath, useProjectPath),
plumber: rq('gulp-plumber', projectPath, useProjectPath),
stripCssComments: rq('gulp-strip-css-comments', projectPath, useProjectPath),
notify: rq('gulp-notify', projectPath, useProjectPath),
gcmq: rq('gulp-group-css-media-queries', projectPath, useProjectPath),
gulpif: rq('gulp-if', projectPath, useProjectPath),
replace: rq('gulp-string-replace', projectPath, useProjectPath),
concat: rq("gulp-concat", projectPath, useProjectPath),
stripComments: rq('gulp-strip-comments', projectPath, useProjectPath),
babel: rq('gulp-babel', projectPath, useProjectPath),
uglify: rq('gulp-uglify', projectPath, useProjectPath),
browserSync: rq('browser-sync', projectPath, useProjectPath).create(),
rename: rq('gulp-rename', projectPath, useProjectPath),
imagemin: rq('gulp-imagemin', projectPath, useProjectPath),
imageminPngquant: rq('imagemin-pngquant', projectPath, useProjectPath),
cache: rq('gulp-cache', projectPath, useProjectPath),
merge: rq('merge-stream', projectPath, useProjectPath),
imageResize: rq('gulp-image-resize', projectPath, useProjectPath),
spritesmith: rq('gulp.spritesmith', projectPath, useProjectPath),
buffer: rq('vinyl-buffer', projectPath, useProjectPath)
};
};
module.exports.initGlobal = initGlobal;
// Установка режима разработки
//
const setDevMode = async () => {
mbx.config.devMode = true;
};
// Установка production режима
//
const setProdMode = async () => {
mbx.config.devMode = false;
};
const initTasks = () => {
const scriptTasks = require("./tasks");
scriptTasks.forEach( taskName => {
require(path.join(__dirname, "tasks", taskName))();
});
mbx.gulp.task("assets", mbx.gulp.series(
"fonts",
"local-components-js",
"local-components-sass",
"vendor-js",
"vendor-css",
"theme-img",
"theme-js",
"theme-sass",
"components-images",
"components-js",
"components-sass"
));
// Сборка для разработки
//
mbx.gulp.task("dev", mbx.gulp.series(
setDevMode,
"assets"
));
// Сборка для production
//
mbx.gulp.task("prod", mbx.gulp.series(
setProdMode,
"assets"
));
// Задание по-умолчанию
//
mbx.gulp.task("default",
mbx.gulp.series(
"dev",
mbx.gulp.parallel("watch", "browser-sync")
)
);
};
module.exports.initTasks = initTasks;