Alloy DAY 003: tss を @import する

DAY 003 は tss ファイルを @import するための用意を紹介します。これは最初にやっておくと幸せになれますね。
参照: https://gist.github.com/FokkeZB/6011624

いぁあ、import が公式でサポートされてないのに驚きだけどね


alloy generate jmk

jmk はコンパイル時に自前の処理を入れたい時に設定します。jade を xml にする場合もこれを利用できます。
まず、alloy プロジェクトのルートで下記コマンドを実行すると、app/alloy.jmk が生成される。

[cc lang=”ruby” width=”100%” height=”auto” line_numbers=”true” theme=”blackboard” nowrap=”false”]
$ alloy generate jmk
[/cc]

alloy.jmk

[cc lang=”javascript” width=”100%” height=”auto” line_numbers=”true” theme=”blackboard” nowrap=”false”]
function explodeImport(event, logger) {
var path = require(‘path’),
wrench = require(‘wrench’),
fs = require(‘fs’);

wrench.readdirSyncRecursive(event.dir.project).forEach(function(fileRelative) {

if (!fileRelative.match(/\.tss$/)) {
return;
}

var fileAbsolute = path.join(event.dir.project, fileRelative),
fileContent = fs.readFileSync(fileAbsolute).toString(),
match,
importRelative,
importAbsolute,
importContent;

while (match = /^@import [“‘](.+)[“‘];?$/gim.exec(fileContent)) {
importRelative = match[1];

if (importRelative.indexOf(path.sep) !== -1) {
importAbsolute = path.join(dir.project, match[1]);
} else {
importAbsolute = path.join(path.dirname(fileAbsolute), match[1]);
}

if (!fs.existsSync(importAbsolute)) {
throw new Error(‘Cannot find ‘ + importAbsolute + ‘ to import into ‘ + fileAbsolute);
}

logger.debug(‘Importing ‘ + importAbsolute + ‘ for ‘ + fileAbsolute);

importContent = fs.readFileSync(importAbsolute).toString();
fileContent = fileContent.replace(match[0], ‘//’ + match[0] + “\n” + importContent + “\n//@import”);
}

fs.writeFileSync(fileAbsolute, fileContent);
});
}

function implodeImport(event, logger) {
var path = require(‘path’),
wrench = require(‘wrench’),
fs = require(‘fs’);

wrench.readdirSyncRecursive(event.dir.project).forEach(function(fileRelative) {

if (!fileRelative.match(/\.tss$/)) {
return;
}

var fileAbsolute = path.join(event.dir.project, fileRelative),
fileContent = fs.readFileSync(fileAbsolute).toString(),
match;

while (match = /^\/\/(@import [“‘].+[“‘];?)[\s\S]+\/\/@import/gim.exec(fileContent)) {
fileContent = fileContent.replace(match[0], match[1]);
}

fs.writeFileSync(fileAbsolute, fileContent);
});
}

task(“pre:compile”, function(event, logger) {
explodeImport(event, logger);
});

task(“post:compile”, function(event, logger) {
implodeImport(event, logger);
});

[/cc]

Loading Facebook Comments ...

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です