開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- Node.js(V8) (JavaScript engine)
Automate with Grunt (Brian P. Hogan(著)、Pragmatic Bookshel)の Chapter 2(Manage Files)の 「What's Next?」の部分を取り組んでみる。
コード(Emacs)
package.json
{
"name": "deploying",
"version": "0.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "kamimura",
"license": "MIT",
"devDependencies": {
"grunt": "^1.0.1"
}
}
Gruntfile.js
module.exports = (grunt) => {
grunt.config.init({
pkg: grunt.file.readJSON('package.json'),
copyFiles: {
options: {
workingDirectory: 'working',
manifest: [
'index.html',
'css/',
'js/'
]
},
},
});
grunt.registerTask(
'createFolder',
'Create the working folder',
() => {
grunt.config.requires('copyFiles.options.workingDirectory');
grunt.file.mkdir(grunt.config.get(
'copyFiles.options.workingDirectory'));
});
grunt.registerTask(
'clean',
'Deletes the working folder and its contents',
() => {
grunt.config.requires('copyFiles.options.workingDirectory');
grunt.file.delete(
grunt.config.get('copyFiles.options.workingDirectory'));
});
grunt.registerTask(
'copyFiles',
function () {
this.requiresConfig(`${this.name}.options.manifest`);
this.requiresConfig(`${this.name}.options.workingDirectory`);
let files = this.options().manifest;
let workingDirectory = this.options().workingDirectory;
let recursiveCopy = (src, dest) => {
if (grunt.file.isDir(src)) {
grunt.file.recurse(src, (file) => {
recursiveCopy(file, dest);
});
} else {
grunt.log.writeln(`Copying ${src} to ${dest}`);
grunt.file.copy(src, `${dest}/${src}`);
}
};
files.forEach((item) => {
recursiveCopy(item, workingDirectory);
});
});
grunt.registerTask(
'version',
() => {
let content = '<%=pkg.name %> version <%= pkg.version %>';
content = grunt.template.process(content);
grunt.config.requires('copyFiles.options.workingDirectory');
let dir = grunt.config.get('copyFiles.options.workingDirectory');
grunt.file.write(`${dir}/version.txt`, content);
});
grunt.registerTask(
'deploy',
['clean', 'createFolder', 'copyFiles', 'version']);
};
入出力結果(Terminal)
$ grunt deploy Running "clean" task >> Cannot delete nonexistent file. Running "createFolder" task Running "copyFiles" task Copying index.html to working Copying css/layout.css to working Copying css/style.css to working Copying js/app.js to working Running "version" task Done. $
0 コメント:
コメントを投稿