我有一个文件夹布局,以便:
/
-- css/
-- js/
-- apps/
-- -- myFirstApp/
-- -- mySecondApp/
-- -- ...
每个都是git子模块,并且有相应的Gruntfile,package.json等。我想要做的是相同的命令序列,但根据相应的package.json而不同。
我的命令列表如下:
npm install
grunt dist
copy app/css/[fileName].css (from package.json) to css/
copy app/js/[fileName].js to js/
copy app/js/[fileName].html to /
是否有插件或我忽略的东西,我可以用咕噜这样做?如果可能的话,我不想静态地执行它 - 我只想更新子模块列表以使其工作。
答案 0 :(得分:0)
我不知道任何预先构建的Grunt任务会为你做这件事,但编写任务并不困难。您需要引入Node fs
模块来处理文件系统,显然还有其他一些事情要做......这里有一些代码和TODO
'的一般结构S:
var fs = require("fs"),
path = require("path");
module.exports = function ( grunt ) {
grunt.initConfig({
... // all of your other Grunt config
// options for our new task
copymodulefiles: {
all: {
rootDir: "apps/"
}
}
});
// Here's our custom task definition
grunt.registerMultiTask("copymodulefiles", "Copies files from sub-projects", function() {
var done = this.async(), // tell Grunt this is an async task
root = grunt.config(this.name + "." + this.target + ".rootDir"),
modules = fs.readdirSync(root);
modules.forEach(function(dirName) {
var pkg = fs.readFileSync(root + dirName + path.sep + "package.json", "utf8");
pkgJson = JSON.parse(pkg);
// TODO: find what you need in the pkgJson variable
// copy files from wherever to wherever
// You can write a file like so:
fs.writeFile(theFilenameToWrite, "Contents of the new file", function (err) {
// (check for errors!)
// log it?
grunt.log.ok("file written!");
});
});
// Determine when all are complete and call "done()" to tell Grunt everything's complete
// call Grunt's "done" method to signal task completion
done();
});
};
答案 1 :(得分:0)
尝试grunt-shell我觉得它很完美,并且做了类似你正在尝试的任务。
查看我编写的用于运行shell命令的 Gruntfile.js 配置:
shell: {
multiple: {
command: ['bower install',
'mv bower_components/** public/',
'rm -rf bower_components'
].join('&&')
}
}
所以我在这里运行 bower ,然后我将其组件复制到公共文件夹,之后我删除了bower_components文件夹。所以我想从这里开始你可以根据你的用途自定义这个脚本。