Skip to content

Instantly share code, notes, and snippets.

@haribote
Last active December 25, 2015 04:09
Show Gist options
  • Save haribote/6914908 to your computer and use it in GitHub Desktop.
Save haribote/6914908 to your computer and use it in GitHub Desktop.
Shift-JISなプロジェクトでGruntを使う。
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']);
};
$ npm install iconv --save-dev
  • Gruntfile.js
  • htdocs/
    • js/hoge.js
  • tasks/
    • converttosjis.js
    • converttoutf8.js
    • lib/grunt-iconv-convertchar.js
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment