$ npm install iconv --save-dev
- Gruntfile.js
- htdocs/
- js/hoge.js
- tasks/
- converttosjis.js
- converttoutf8.js
- lib/grunt-iconv-convertchar.js
| module.exports = function (grunt) { | |
| var iconv = require('./lib/grunt-iconv-convertchar.js'); | |
| grunt.registerMultiTask('converttosjis', 'Convert charcode from UTF-8 to Shift_Jis.', function () { | |
| iconv.convert(grunt, this, 'UTF-8', 'SHIFT_JIS'); | |
| }); | |
| }; |
| module.exports = function (grunt) { | |
| var iconv = require('./lib/grunt-iconv-convertchar.js'); | |
| grunt.registerMultiTask('converttoutf8', 'Convert charcode from Shift_Jis to UTF-8.', function () { | |
| iconv.convert(grunt, this, 'SHIFT_JIS', 'UTF-8'); | |
| }); | |
| }; |
| exports.convert = function (grunt, self, charsetFrom, charsetTo) { | |
| var fs = require('fs'); | |
| var exec = require('child_process').exec; | |
| function toArray (obj) { | |
| return (obj instanceof Array) ? obj : [obj]; | |
| } | |
| function renameToUniq (orgName) { | |
| var destName = orgName; | |
| var i = 0; | |
| while (fs.existsSync(destName)) { | |
| destName = destName + '_' + i; | |
| i++; | |
| } | |
| fs.renameSync(orgName, destName); | |
| return destName; | |
| } | |
| var files = toArray(grunt.config(self.name)[self.target].src); | |
| var dests = toArray(grunt.config(self.name)[self.target].dest); | |
| var done = self.async(); | |
| var doneCount = 0; | |
| for (var i=0, len=files.length; i<len; i++) { | |
| (function () { | |
| var src = files[i]; | |
| var dest = dests[i]; | |
| var isRenameSrc = false; | |
| if (src === dest) { | |
| src = renameToUniq(src); | |
| isRenameSrc = true; | |
| } | |
| var cmd = 'iconv -f ' + charsetFrom + ' -t ' + charsetTo + ' ' + src + '>' + dest; | |
| var child = exec(cmd, function (error, stdout, sderr) { | |
| if (error !== null) { | |
| grunt.log.writeln('exec error: ' + error); | |
| } | |
| grunt.log.writeln('File ' + dest + ' created.'); | |
| if (isRenameSrc) { | |
| fs.unlinkSync(src); | |
| } | |
| doneCount++; | |
| if (doneCount === len) { | |
| done(); | |
| } | |
| }); | |
| })(); | |
| } | |
| }; |
| module.exports = function(grunt){ | |
| 'use strict'; | |
| var path = require('path'); | |
| var pkg = grunt.file.readJSON('package.json'); | |
| grunt.initConfig({ | |
| pkg: pkg, | |
| // Shift-JIS -> UTF8 | |
| converttoutf8: { | |
| dist: { | |
| src: 'htdocs/js/hoge.js', | |
| dest: 'htdocs/js/hoge.js' | |
| } | |
| }, | |
| // UTF8 -> Shift-JIS | |
| converttosjis: { | |
| dist: { | |
| src: 'htdocs/js/hoge.js', | |
| dest: 'htdocs/js/hoge.js' | |
| } | |
| } | |
| }); | |
| // load tasks | |
| var taskNames; | |
| for(taskNames in pkg.devDependencies) { | |
| if(taskNames.substring(0, 6) == 'grunt-') { | |
| grunt.loadNpmTasks(taskNames); | |
| } | |
| } | |
| grunt.loadTasks('tasks'); | |
| // regist tasks | |
| grunt.registerTask('default', ['converttoutf8', 'some', 'tasks', 'converttosjis']); | |
| }; |