$ 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']); | |
}; |