DAY 003 は tss ファイルを @import するための用意を紹介します。これは最初にやっておくと幸せになれますね。
参照: https://gist.github.com/FokkeZB/6011624
いぁあ、import が公式でサポートされてないのに驚きだけどね
alloy generate jmk
jmk はコンパイル時に自前の処理を入れたい時に設定します。jade を xml にする場合もこれを利用できます。
まず、alloy プロジェクトのルートで下記コマンドを実行すると、app/alloy.jmk が生成される。
1 | $ alloy generate jmk |
alloy.jmk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 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); }); |