2000 строк? Это длинный gruntfile. Вот grunt-файл, который вы можете использовать, чтобы разбить ваш код на что-то более модульное:
gruntfile. js
function init(grunt) {
"use strict";
function loadConfig(pattern) {
let config = {},
fileName,
fileData;
grunt.file.expand(pattern).forEach(function (filePath) {
fileName = filePath.split('/').pop().split('.')[0];
fileData = require('./' + filePath)(grunt);
config[fileName] = fileData;
});
return config;
}
function loadGrunt() {
const config = {
pkg: grunt.file.readJSON('package.json')
};
require('load-grunt-tasks')(grunt);
if (grunt.file.exists('grunt/tasks')) {
grunt.log.writeln('task directory found, loading tasks...');
grunt.loadTasks('grunt/tasks');
}
grunt.util._.extend(config, loadConfig('grunt/configs/**/*.js'));
grunt.initConfig(config);
}
loadGrunt();
}
module.exports = init;
Что делает этот gruntfile:
- Он динамически создает объект конфигурации для использования grunt, загружая каждый файл
.js
, который он находит в project-root/grunt/configs
. Имя каждого файла соответствует его ключу для объекта конфигурации grunt. - Он динамически загружает любые задачи из
project-root/grunt/tasks
Если ваша конфигурация использует grunt-contrib-copy
, то в вашем Project, у вас будет файл конфигурации, похожий на следующий:
project-root / grunt / configs / copy. js
module.exports = function (grunt) {
"use strict";
return {
base: {
options: {
process: function (content) {
return grunt.template.process(content);
}
},
src: 'grunt/templates/base.url.js',
dest: 'www/source/config/base.url.js'
},
pluginManifest: {
src: 'cordova/template/package.json',
dest: '<%= grunt.task.current.args[0] %>/package.json'
},
splashScreens: {
expand: true,
cwd:"grunt/templates/",
src: "screen/**",
dest: '<%= create.dest %>/res/'
}
};
};
Вы можете затем сдвиньте ваши глобальные функции в файл helpers
javascript и импортируйте их в конфиги в типичном Node.js стиле:
project-root / grunt / configs / sass. js
module.exports = function (grunt) {
const helpers = require("../helpers.js)(grunt);
return {
options: {
implementation: sass,
includePaths: helpers.globalFunctionOne('dev'),
outputStyle: 'expanded',
sourceMap: true
},
dist: {
files: {
globalFunctionTwo('dist'),
}
}
};
};
Project-root / grunt / helpers. js
module.exports = function (grunt) {
function globalFunctionOne(param1) {
console.log('yay it works from main file');
}
function globalFunctionTwo(param1) {
console.log('yay it works from partial file');
}
return {
globalFunctionOne,
globalFunctionTwo
};
};