tôi đã cùng một vấn đề và giải quyết nó.
Lưu ý: grunt là tất cả các JavaScript chạy trong nút, vì vậy bạn có thể thực hiện bất kỳ điều gì hỗ trợ JavaScript và nút.
việc Giải pháp của tôi như thế này:
Đầu tiên, đặt tất cả các công cụ cho grunt của ứng dụng cốt lõi của bạn trong một tập tin JavaScript riêng biệt ví dụ "grunt-my-app-core.js". Trong đó xuất hai chức năng, init(grunt)
và 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)
là tải và đăng ký tác vụ. Có thể là như thế này:
/**
* 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)
sẽ xây dựng và trả lại đối tượng cấu hình:
/**
* 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 ...
};
}
và hơn, các Gruntfile.js
trong dự án chủ đề của bạn có thể rất ngắn và không cần tất cả những gì thuộc ứng dụng cốt lõi của bạn. Có thể giống như sau:
/**
* 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']);
};
Bây giờ, nếu bạn thay đổi thứ gì đó trên ứng dụng cốt lõi, tất cả chủ đề sẽ nhận được điều này. Điều duy nhất bạn cần cập nhật thủ công là devDependencies
trong tệp package.json
.
Tôi không chắc chắn những gì bạn muốn đạt được. Có lẽ bạn có thể cung cấp một ví dụ mã nhỏ cho thấy vấn đề của bạn? –