我有同样的问题并解决了它。
请记住:grunt 是在 node 中运行的所有 JavaScript,所以你可以做任何 JavaScript 和 node 支持的事情。
我的解决方案是这样工作的:
首先,将核心应用程序的 grunt 的所有内容放在一个单独的 JavaScript 文件中,例如“grunt-my-app-core.js”。在那个导出两个函数中,init(grunt)
和getConfig(grunt, options)
。
(function() {
"use strict"; //enable ECMAScript 5 Strict Mode
function init(grunt) {
}
function getConfig(grunt, options) {
return {};
}
///////////////////////////
// Exports
exports = module.exports = {
init: init,
getConfig: getConfig
};
})();
init(grunt)
是加载和注册任务。可能是这样的:
/**
* public API
*
* add all required settings to grunt
*
* register task "dist" and task "doc"
*
* @param {object} grunt the grunt instance
* @return {void}
*/
function init(grunt) {
// overwrite platform specific setting get always unix like line feed char
grunt.util.linefeed = '\n';
// Load plugins provide necessary task.
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.registerTask('dist', ['clean:build', 'copy:build', 'copy:dist', 'uglify', 'less']);
grunt.registerTask('doc', ['clean:doc', 'copy:doc']);
}
getConfig(grunt, options)
将构建并返回配置对象:
/**
* public API
*
* will return a config object that have to be given as argument to "grunt.initConfig"
*
* @param {object} grunt the grunt instance
* @param {object|undefined} options to change some pathes
* @return {object} the configuration object for initConfig
*/
function getConfig(grunt, options) {
options = options || {};
var buildDir = options.buildDir || "build/";
var distDir = options.distDir || "dist/";
var docDir = options.docDir || "doc/";
// ... doing some stuff to collect files or what ever ...
return {
clean: {
build: {
src: [buildDir]
},
doc: {
src: [docDir]
}
},
copy: {
// ...
}
// ... add here all the stuff you like to config ...
};
}
而且,Gruntfile.js
您的主题项目中的 可能非常短,并且不需要您的核心应用程序的所有内容。它可能是这样的:
/**
* Module dependencies.
*/
var gruntMyApp = require("../my-app/grunt-my-app-core.js");
/*global module:false*/
module.exports = function(grunt) {
var config = gruntMyApp.getConfig(grunt);
// ... extend config, if you need it
grunt.initConfig(config);
// will register Task "dist" and "doc"
gruntMyApp.init(grunt);
// Default task.
grunt.registerTask('default', ['dist', 'doc']);
};
现在,如果您更改核心应用程序上的某些内容,所有主题都会得到这个。您唯一需要更新手册的是devDependencies
文件中的package.json
。