ãšã³ããªãŒ
Diary.ruïŒããã³ããã¯4幎以äžïŒã®ååšäžã«ãèšå€§ãªéã®JavaScriptã³ãŒããèç©ãããŸããïŒããã€ãã¯æ¥ç¶ãã¡ã€ã«ã®åœ¢ã§å¥åã®ãããžã§ã¯ãã«ãããããã€ãã¯ã³ã³ãããŒã«ããŒã¯ã¢ããã§çŽæ¥å®çŸ©ãããããã€ãã¯
StringBuilder
ã䜿çšããŠåé¢ã³ãŒãã§çŽæ¥åéãããŸããã ããã«è¿œå ãããŸããïŒ
- éçã³ã³ãã³ããåä¿¡ããããã®HTTPãªã¯ãšã¹ããå¢ããŠããŸã-ããšãã°ã11åã®JavaScriptãã¡ã€ã«ã
<head>
ã¿ã°å ã®ãã¹ãŠã®ããŒãžã«ããŒããããŸããã - æã äºãã«ãªãŒããŒã©ããããã°ããŒãã«å€æ°ã
ããã§äœããããæã ãšå€æããã®ã§ãç§ãã¡ã¯æåªå ã®ã¿ã¹ã¯ãèšå®ããŸããïŒåå¥ã«æ¥ç¶ããããã¹ãŠã®ãã¡ã€ã«ã1ã€ã®çž®å°ããã±ãŒãžã®
<head>
ããåé€ããŸãã åæã«ãã³ãŒãã¯ãµãŒãããŒãã£ãšãç§ãã¡ãã«åå²ãããäœããã®ããŒãµãŒã«ãã£ãŠãã§ãã¯ãããäºå®ã§ããã
ãã®èšäºã§ã¯ããã®åé¡ãã©ã®ããã«è§£æ±ºãããã説æããŸãã
䜿çšãããã®
ãŸãããã®ããã±ãŒãžã®èªåã¢ã»ã³ããªãæŽçããæ¹æ³ã決å®ããå¿ èŠããããŸããã ãã¡ãããAntããMSBuildãŸã§ããããããã«ãã·ã¹ãã ã䜿çšã§ããŸãã ããšãã°ãRubyãPythonã§ç¬èªã®ç°¡åãªã¹ã¯ãªãããäœæã§ããŸãã ãã®çµæããã€ã¯ãæžãããããã©ã¯ã¿ãŒã§éãæã£ããããã®ã§ã¯ãªãã Gruntã䜿çšããããšã«ããŸããã ç¥ããªã人ã®ããã«ïŒGruntã¯JavaScriptã¿ã¹ã¯ã©ã³ããŒã§ããã node.jsã§å®è¡ãããç¡æã®MITã©ã€ã»ã³ã¹ã®äžã§é åžãããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã®çžå¯Ÿçãªãè¥ããã«ããããããããã§ã«åªããããŒã«ãšããŠã®å°äœã確ç«ããŠããŸããjQueryãšQUnitãTwitterã®TweetdeckãAdobeã®Bracketsã®æ§ç¯ã«äœ¿çšãããŠããŸãã ãããã®æšå¥šäºé ã«å ããŠãGruntãéžæããç¬èªã®çç±ããããŸããã
- 䜿ãããã-æäœãéå§ããã«ã¯ãnode.jsãã€ã³ã¹ããŒã«ããã ãã§ãã
- node.jsã§JavaScriptã䜿çšããŠãã¹ãŠã®ã¿ã¹ã¯ã解決ãã解æã«JSHintã䜿çšããã³ãŒããçž®å°ããUglifyJSã䜿çšããŸããå°æ¥ãæ€èšããå Žåãnode.jsã¯ãŠããããã¹ãããã§ãã¯ãããã³ã¹ã¿ã€ã«ã®æ§ç¯ã«äžå¯æ¬ ã§ãã
- ããŸããŸãªããŒã«ãèµ·åããããã®è±å¯ãªãã©ã°ã€ã³ãšãç¬èªã®ãã©ã°ã€ã³ãäœæããããã®ã·ã³ãã«ãªAPIã
ãšããã§ãç§ãã¡ã®ãããžã§ã¯ããASP.NETã§åäœããããšã¯èª°ã«ãšã£ãŠãç§å¯ã§ã¯ãªãããã Bundle Transformerãã掟çããWeb Optimization Frameworkã䜿çšããå¯èœæ§ãæ€èšããŸããã ãã ãã次ã®çç±ã«ããããããã®æ±ºå®ãæåŠããŸããã
- ãããã®ããŒã«ã䜿çšããŠãã³ãŒãã解æããããšã¯ã§ããŸããã
- ã¯ã©ã€ã¢ã³ãã«é
ä¿¡ãããã³ã³ãã³ãã¯ããªã¯ãšã¹ãã«å¿ããŠåçã«çæãããŸãããã®æäœã¯ãéçãã¡ã€ã«ãã¢ããããŒãããWebãµãŒããŒãããé£ããå ŽåããããŸãã 誰ããããããç¯çŽããŠãããšèšããããããŸããããïŒ
ãŸã ãç§ãã¡ã¯ããã«åæããŸãã-ç§ãã¡ã®ãããžã§ã¯ãã§ã¯ããã§ã«ãµãŒããŒãããŒãããããªãéãæäœããããŸãã
第äºã« ããããçŽç²ã«æè¡çã«è¡ãããšã¯äžå¯èœã§ãããJavaScriptãã¡ã€ã«ãä¿åãããŠãããããžã§ã¯ãã¯ãç§ãã¡ã®Webã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªãããã§ãã
ããã«ãè¿ãå°æ¥ã®CDNãžã®ç§»è¡ã«é¢é£ããŠéçãã¡ã€ã«ãå¿ èŠã«ãªããŸããã
ãã ããå°æ¥ãããã®ããŒã«ãRuby on Railsã®ã¹ããã±ããã®ã¬ãã«ã«éããå Žåããããã®æ€èšã«æ»ãããšãé€å€ããŸããã
è¡ããïŒ
ãããã£ãŠãã¢ã»ã³ããªã®ã·ã¹ãã ãéžæãããè¡åããæãæ¥ãŸããããããã«ãã¬ãŒã·ã§ã³ãè¡ãåã«äºçŽãã䟡å€ããããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ASP.NETã§èšè¿°ãããŠãããããã»ãšãã©ã®éçºè ã¯Windowsã§äœæ¥ãïŒããã¯é©ãããšã§ã¯ãããŸããïŒãTeamCityã䜿çšããŠæ§ç¯ããç¶ç¶çãªçµ±åããã»ã¹ïŒããã«ã€ããŠã¯åã®èšäºã§æžããŸããïŒãçª ãããã£ãŠãäœè ã¯ãUnixã®ãã¡ã³ã«ã以äžãWindowsãšã³ã·ã¹ãã ã®ãã¬ãŒã ã¯ãŒã¯å ã§èª¬æããããšããäºå®ãèš±ãã以äžã®ãã¹ãŠã®çµéšã課é¡ãšããŠèªèããããã«äŸé ŒããŸãã
Windowsã§ã®node.jsã®ã€ã³ã¹ããŒã«ã¯ãé·ãéåé¡ã§ã¯ãããŸããã§ããã ããã«å¿ èŠãªã®ã¯ãå ¬åŒãµã€ããããã€ããªãã¡ã€ã«ãããŠã³ããŒãããŠèµ·åãã[次ãž]ãã¿ã³ã«æ¿å ¥ããããšã ãã§ãã node.jsãšãšãã«ãnpmãã€ã³ã¹ããŒã«ãããŸããããã¯ãGruntãšãã®æäœã«å¿ èŠãªãã¹ãŠãã€ã³ã¹ããŒã«ããããã±ãŒãžãããŒãžã£ãŒã§ãã ãŸãããããžã§ã¯ãã«
package.json
ãã¡ã€ã«ãäœæããŸãããã®ãã¡ã€ã«ã«ã¯ããããžã§ã¯ãã®ååãããŒãžã§ã³ãäŸåé¢ä¿ãnode.jsã®ããŒãžã§ã³ãèšè¿°ããŸãã 次ã®ããã«ãªããŸãã
{ "name": "Dnevnik", "version": "0.1.0", "private": true, "dependencies": { "grunt": "0.4.0", "grunt-cli": "0.1.6", "grunt-contrib-concat": "0.1.3", "grunt-contrib-jshint": "0.2.0", "grunt-contrib-uglify": "0.1.1", "grunt-hash": "0.2.2", "grunt-contrib-clean": "0.4.0" }, "engines": { "node": "0.10.0" } }
äŸåé¢ä¿ã§ã¯ãGruntãšãã®ããŒãžã§ã³ãããã³å¿ èŠãªãã©ã°ã€ã³ã瀺ããŸãã åæ段éã§ã¯ã6ã€ã®ãã©ã°ã€ã³ã®ã¿ã䜿çšããŸããã
-
grunt-cli
ã³ãã³ãã©ã€ã³ããGruntãå®è¡ãããã©ã°ã€ã³ -
grunt-contrib-concat
ãã¡ã€ã«ã®ãªã¹ãã1ã€ã«é£çµããããã®ãã©ã°ã€ã³ -
grunt-contrib-jshint
- JSHintãŠãŒãã£ãªãã£ã䜿çšããŠJavaScriptã³ãŒãããã§ãã¯ããããã®ãã©ã°ã€ã³ -
grunt-contrib-uglify
ã䜿çšããŠJavaScriptã³ãŒããçž®å°ããããã®ãã©ã°ã€ã³ -
grunt-hash
ããã·ã¥ãµã ããã¡ã€ã«åã«è¿œå ããããã®ãã©ã°ã€ã³ïŒãã¡ã€ã«ã®å 容ãå€æŽããããšãã«ãã£ãã·ã¥ããã©ãã·ã¥ããããïŒ -
grunt-contrib-clean
äžæãã¡ã€ã«ãšã¢ãŒãã£ãã¡ã¯ããããã£ã¬ã¯ããªãåé€ããããã®ãã©ã°ã€ã³
ãã¹ãŠã®ããã±ãŒãžãšãã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããã«ã¯ãã³ã³ãœãŒã«ã§
package.json
ããããã£ã¬ã¯ããªã«é¢é£ããã³ãã³ãã1ã€ã ãå®è¡ããå¿ èŠããããŸãã
> npm install
æ£åžžã«å®äºãããšããã©ã«ããŒ
.\node_modules
ã衚瀺ãããå¿ èŠãªãã¹ãŠã®ã¢ãžã¥ãŒã«ãå«ãŸããŸãïŒããã¯npmãä»ããŠã€ã³ã¹ããŒã«ãããã¢ãžã¥ãŒã«ã®ãã©ã«ããŒã®æšæºåã§ãïŒã
次ã«ãã¢ããªã±ãŒã·ã§ã³ã®ã«ãŒããã£ã¬ã¯ããªã«
Gruntfile.js
ãäœæããå¿ èŠããããŸã
Gruntfile.js
ãã¹ãŠã®ããžãã¯ãå«ãŸããŸãã ãã®æ§é ã¯éåžžã«åçŽã§ãã
module.exports = function (grunt) { 'use strict'; grunt.initConfig({}); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-hash'); grunt.loadNpmTasks('grunt-contrib-clean'); grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'hash', 'clean']); };
åºæ¬çã«ãããã¯node.jsã®JavaScriptã¹ã¯ãªããã§æ§æãããŸãã
- gruntãã©ã¡ãŒã¿ãŒãåãåãã©ãããŒé¢æ°ã
-
grunt.initConfig()
é¢æ°ããã¹ãŠã®ã¿ã¹ã¯ã®èšå®ãå«ãJavaScriptãªããžã§ã¯ããæž¡ãããŸãã -
grunt.loadNpmTasks()
ããã±ãŒãžããã¿ã¹ã¯ãããŒãããgrunt.loadNpmTasks()
é¢æ°ã -
grunt.registerTask()
é¢æ°ãç¬èªã®ã¿ã¹ã¯ãç»é²ããŸãã
ã¿ã¹ã¯ãéå§ãããšã
grunt.initConfig()
é¢æ°ã«æž¡ããããªããžã§ã¯ãå ã§ååãæã€å±æ§ãèŠã€ããããšãã
option
å±æ§ãä»ããŠãã¹ãŠã®èšå®ãåãåããä»ã®å±æ§ãä»ããŠã¿ãŒã²ãããåãåããŸãã ã¿ã¹ã¯ã«ã¯ç¡å¶éã®æ°ã®ç®æšãèšå®ã§ããåç®æšã¯ããèªäœã®äžéšã®èšå®ããªãŒããŒã©ã€ãã§ããŸãã å ¬åŒããã¥ã¡ã³ãã§ã¿ã¹ã¯ã®æ§æã«ã€ããŠè©³ããèªãããšãã§ããŸã ã
Gruntãèµ·åããã«ã¯ãã³ã³ãœãŒã«ã§ã¢ããªã±ãŒã·ã§ã³ã«ãŒããã£ã¬ã¯ããªã«é¢é£ãã次ã®ã³ãã³ããå®è¡ããå¿ èŠããããŸãã
> .\node_modules\.bin\grunt.cmd
å¿ èŠã«å¿ããŠãã¿ã¹ã¯ã®ååãšå®äºããç®æšããã©ã¡ãŒã¿ãŒã«æž¡ãããšãã§ããŸãã ãã©ã¡ãŒã¿ãªãã§èµ·åãããšã
default
ã®ååã®ã¿ã¹ã¯ãå®è¡ãããŸãã
次ã«ãããŸããŸãªã©ã€ãã©ãªãšjQueryãã©ã°ã€ã³ãå«ãæªåé«ã11åã®ãã¡ã€ã«ãåå¥ã®ã¢ãããã¯ãã¡ã€ã«ã«åå²ããå¿ èŠããããŸããã ãããã®ããã€ãã¯å§çž®ãããŠãããéçºã®å©äŸ¿æ§ã®ããã«ããã¹ãŠã®ã³ãŒããéåžžã®èªã¿ããã圢åŒã«ããå¿ èŠããããŸããã ãŸããjQueryã®çž®å°ãããŠããªãããŒãžã§ã³ãç°¡åã«èŠã€ããããšãã§ããå Žåãå€ä»£ã®ãã©ã°ã€ã³ã®é©åãªããŒãžã§ã³ãèŠã€ããããšã¯ããã»ã©ç°¡åã§ã¯ãªãã®ã§ãããããåããªããã°ãªããŸããã§ããã ããããçµæã¯åªåãã䟡å€ããããŸããããããžã§ã¯ãã«ã¯çž®å°ãããã³ãŒãã¯ãªãããããã¬ã䜿çšããŠjQueryãœãŒã¹ã³ãŒãã«ç°¡åã«ã¢ã¯ã»ã¹ã§ããŸããã
åéçºè ãnode.jsãã€ã³ã¹ããŒã«ããŠããã±ãŒãžããã«ãããå¿ èŠããªãããã«ãJSON圢åŒã®ã·ã³ãã«ãªãããã³ã°ãã¡ã€ã«ãäœæããŸããïŒãã¡ãããæãçŸãããœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸããããæåã¯å¯èœãªéããã¹ãŠãã·ã³ãã«ã«ããããšã決å®ããŸããïŒãããã€ãã®ãã¡ã€ã«ããïŒ
{"package.js": ["jquery.js", "foo.js", ⊠"bar.js"]}
ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšããã®ãã¡ã€ã«ãèªã¿èŸŒãŸããéã·ãªã¢ã«åããããã¡ã€ã«ãããŒãžã«è¿œå ãããŸããã ãããŠãã¢ã»ã³ããªäžã«ãGruntã¯ã©ã®ããã±ãŒãžããã©ã®ããã±ãŒãžããã«ããããã«é¢ããæ å ±ãåãåããæçµæ®µéã§ãããå€æããŸããã ãã®ããããªã¹ãå ã®äžé£ã®ãã¡ã€ã«ã®ä»£ããã«ãã¢ã»ã³ãã«ãããããã±ãŒãžã®ååã1ã€ãããŸããã
Gruntãå®è¡ããããã®ã³ãŒããäœæãããã¿ã¹ã¯ãæºåãããåŸãTeamCityã®ãã¹ãŠã®ãã«ããšãŒãžã§ã³ãã«node.jsãã€ã³ã¹ããŒã«ããPowerShellãä»ããŠã¹ã¯ãªãããå®è¡ããŠå®éã«å®è¡ããå¿ èŠããããŸããã æ¯åãããã¯ãŒã¯ããå¿ èŠãªäŸåé¢ä¿ãããŠã³ããŒãããªãããã«ããããã«ïŒãã©ãã£ãã¯ã®ingãã«ã€ããŠã§ã¯ãªããã€ã³ã¿ãŒããããnpmãªããžããªã®å®å®æ§ã«äŸåããããªããšæããŸãïŒãããããåãã«ããšãŒãžã§ã³ããšã³ããŒã®å¥ã ã®ãã©ã«ããŒã«ä¿åããããšã«ããŸãã䜿çšåã«é©åãªå Žæã«ã ãå®ããŠéœæ°ãªããšç§ãã¡ã¯èããŸããïŒãããäœããããããã®ãã以äžãèªãã§ãã ããïŒã ãã ãããã®ç¶æ³ã§ã¯ã
.\node_modules
ãã¹ãWindows 260æåã§èš±å¯ãããŠããæ倧æåæ°ïŒHiãMS-DOSïŒãããã¯ããã«é·ããªãå¯èœæ§ããããããcopyããã³xcopyã³ãã³ãã¯ãšã©ãŒã§é£ã³åºããŸãã / Eãã©ã°ã䜿çšããããã³ã㌠ã
çºçããåé¡ãšãã®è§£æ±ºæ¹æ³ã
Gruntã¯ãTeamCityãèµ·åããçŽåŸã«æåã®è±ãæ»ã蟌ãŸããŸãã-圌ã®äœæ¥ã®ãã°ãååŸã§ããŸããã§ããã PowerShellã¹ã¯ãªãããããããåããåé¡ãç§ãã¡ã®åŽã«ãªãããšã«æ°ã¥ãããšããGruntãªããžããªã®åé¡ãã©ãã«ãŒã調ã¹å§ãã ããã§æ³šç®ãã¹ãã¡ãã»ãŒãžãèŠã€ããŸããã ãã®åé¡ã¯ç§ãã¡ã ãã§ãªããnode.jsã®ãã°ã«é¢é£ããŠããããšãå€æããŸããããã®ãã°ã§ã¯ãstdin / stdout / stderrã¹ããªãŒã ãWindowsã§ãããã¯ãããŸããã 圌ãã¯ããŒãžã§ã³0.12.0ã§ãããä¿®æ£ããããšãçŽæããŸãããä»ã®ãšãããGruntãç§ãã¡ãšååããããã«ãããŸãçŸãããªãããã¯ã«é Œããªããã°ãªããŸããã§ããïŒGruntã2åå®è¡ããŸãã-æåã«æ£ããçµäºã³ãŒããååŸãã2çªç®ã«ã¹ããªãŒã ããªãã€ã¬ã¯ãããŸãããã¡ã€ã«ãžã®åºåããã®åŸããã®ãã¡ã€ã«ã®å 容ã衚瀺ãããŸããã
å°ãåãŸã§ããã®ãšã©ãŒãä¿®æ£ããGruntã®ããããç»å ŽããŸãããããŸã ã¡ã€ã³ãªããžããªã«ã¯ãããŸããã ãã®ããã ãã©ãŒã¯ãGithubããçŽæ¥ããŠã³ããŒãããå¿ èŠããããŸããããããã§ããã«å¥ã®åé¡ã«çŽé¢ããŸããã å®éãç§ãã¡ãæåã«Gruntã§ä»äºãå§ãããšãããã«ããšãŒãžã§ã³ãããŒã¯ã«ã¯3å°ã®è»ãããããŸããã§ããã çŸåšã¯8ã€ãããããããã«æ°ããããã±ãŒãžãã³ããŒããã®ã¯éå±ãªäœæ¥ã§ãã èãçŽããã«ãããŒã«ã«ã®npmãªããžããªãæªæããããšã«ããŸãããããã§ã¯ãå ¬åŒãªããžããªã®æ¥ç¶ãšå¯çšæ§ã«é¢ä¿ãªããåžžã«ããã±ãŒãžããã°ããååŸã§ããç¬èªã®ãªããžããªãé 眮ã§ããŸãã
å ¬åŒã®npmãªããžããªã¯CouchDBã§åäœããããŒã«ã«ãªããžããªãäœæããã«ã¯ãã¬ããªã±ãŒã·ã§ã³ãäœæããããã«å¿ èŠãªã ãã§ããã ç§ãã¡ã¯ããã«ä»®æ³ãã·ã³ãïŒåã³ãWindowsãå®è¡ããŠïŒéžæããããã«CouchDBãã€ã³ã¹ããŒã«ããŸãã-ããã¯node.jsãã€ã³ã¹ããŒã«ãããããè€éã§ã¯ãªãããã§ãã ããã«ãããŒã«ã«ãããã¯ãŒã¯ãããªããžããªã«ã¢ã¯ã»ã¹ããã«ã¯ãæ§æãã¡ã€ã«CouchDB
<CouchDB install directory>\etc\couchdb\local.ini
ã§2ã€ã®å€ãå€æŽããå¿ èŠããããŸãã
secure_rewrites = false bind_adress = 0.0.0.0
ä»®æ³ãã·ã³ã®5984ããŒãã«éåžžã®GETèŠæ±ãéä¿¡ãã次ã®JSONå¿çã®ãããªãã®ãåä¿¡ããããšã«ãããèšå®ãæ£ããããšã確èªã§ããŸãã
{"couchdb":"Welcome","version":"1.2.1"}
ãã®åŸããããžã§ã¯ãã§äœ¿çšããããã¹ãŠã®ã¢ãžã¥ãŒã«ã«é¢ããæ å ±ãååŸããŠè€è£œããã ãã§ãã ãããè¡ãã«ã¯ããããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã§ã次ã®ã³ãã³ããå®è¡ããŸãã
> npm shrinkwrap
圌女ã¯
npm-shrinkwrap.json
ãäœæã
npm-shrinkwrap.json
ããã®
npm-shrinkwrap.json
ããã¹ãŠã®äŸåé¢ä¿ãå«ããããžã§ã¯ãã«é¢ãããã¹ãŠã®æ å ±ãå«ãŸããŸãã ãã ããååã ããå¿ èŠãªãããçµæãã¡ã€ã«ããããããååŸããå°ããªååž°ã¹ã¯ãªãããäœæããŠãããå°ãäœæ¥ããå¿ èŠããããŸãïŒä¿¡ããããªãã»ã©å¹³å¡ãªã®ã§ãã³ãŒãã¯æäŸããŸããïŒã ããã±ãŒãžã®ååãèšèŒããããªã¹ããåãåã£ãåŸãè€è£œã®ããã«CouchDBã«éåžžã®HTTPèŠæ±ãå®è¡ããããšã¯æ®ããŸãã ãã®ããã«
curl
ãŠãŒãã£ãªãã£ã䜿çšããŸãïŒä»ã®ãã®ã䜿çšã§ããŸãïŒãã䟿å®äžã次ã®å 容ã®
deps.json
ãšããJSONãã¡ã€ã«ãäœæããŸãã
{ "source": "http://isaacs.iriscouch.com/registry/", "target": "registry", "create_target": true, "doc_ids": ["_design/app", "_design/ghost"] }
"doc_ids"
å±æ§ã®å€ã«å¿ èŠãªäŸåé¢ä¿ã®ãªã¹ããè¿œå ããå¿ èŠããããŸãïŒããã±ãŒãž
"_design/app"
ã
"_design/ghost"
ã¯ããŒã¿ããŒã¹ããªããžããªãšããŠç·šæããŸãïŒã ãããŠãã³ã³ãœãŒã«ã§æ¬¡ã®ã³ãã³ããå®è¡ããã ãã§ãïŒ
> .\curl.exe -X POST http://user:password@npm:5984/_replicate -d@deps.json -H "Content-Type: application/json"
ãµãŒããŒããã®å¿çãJSON圢åŒã§ããã2ã€ã®å±æ§
"ok"
ãš
"doc_write_failures"
ã«æ³šæãã䟡å€ããããŸãã æåã
true
ã§2çªç®ã
0
å Žåããã±ããã®è€è£œã¯æåããŠããŸãã
ç§ãã¡ãããã¹ãããšã¯ãGithubããåãåã£ããã©ãŒã¯ãGruntã®ãããã§å ¬éããããšã ãã§ããã ãããè¡ãã«ã¯ããã®ãã©ãŒã¯ã®
package.json
ãã¡ã€ã«ã®ããŒãžã§ã³åãå€æŽãã次ã®ã³ãã³ãã䜿çšããŠããŒã«ã«ãŠãŒã¶ãŒãªããžããªã«ç»é²ããŸãã
> npm adduser --registry="http://npm:5984/registry/_design/app/_rewrite/"
ããã±ãŒãžãå ¬éããŸãã
> npm publish --registry="http://npm:5984/registry/_design/app/_rewrite/"
ããã§äœæ¥ã¯å®äºã§ããããã±ãŒãžã¯ããŒã«ã«ãªããžããªã«å ¬éãããŸã
package.json
ãããžã§ã¯ãã§ããŒãžã§ã³ãå€æŽããããšãå¿ããªãã§ãã ããã
ããã§ããã¹ãŠã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããããã«ã次ã®ã³ãã³ãã䜿çšã§ããŸãïŒäœ¿çšããå¿ èŠããããŸãïŒã
> npm install --registry="http://npm:5984/registry/_design/app/_rewrite/"
ãšããã§ãå°ãåãŸã§ãPowerShellã¹ã¯ãªããã䜿çšããŠTeamCityã§Gruntãå®è¡ããããšãæåŠãããã©ã°ã€ã³ã䜿çšããããã«åãæ¿ããŸããã ãã®ãã©ã°ã€ã³ã¯TeamCity.NodeãšåŒã°ããnode.jsããã³npmããã«ããšãŒãžã§ã³ãã«ã€ã³ã¹ããŒã«ãããŠãããã©ããã確èªããªãããTeamCityã§node.jsã¹ã¯ãªãããnpmãGruntãããã³PhantomJSãå®è¡ã§ããŸãã ç§ãã¡ã¯åœŒã®ä»äºã«çµ¶å¯Ÿã«æºè¶³ããŠããŸãããnode.jsããšãŒãžã§ã³ãã®1ã€ã«çœ®ãã®ãå¿ããããšãåŠãã ã®ã¯åœŒã®å©ãããã£ãããã§ãã
次ã¯ïŒ
node.js 0.12ããã³Grunt 0.5ã®ãªãªãŒã¹ã楜ãã¿ã«ããŠããŸãããã®ãªãªãŒã¹ã§ã¯ãäžèšã®ãšã©ãŒãä¿®æ£ããå¿ èŠããããŸãã ãããŠãå°æ¥ã®èšç»ã¯æ¬¡ã®ãããªãã®ã§ãããŸãããã¡ã€ã«ãããã³ã°ã®äœ¿çšãæŸæ£ããå¿ èŠãããã次ã«ããã¹ãŠã®JavaScriptã³ãŒããã³ã³ãããŒã«ããå¥ã®ãã¡ã€ã«ã«ç§»åããŠãã³ãŒãéãæžããããã®ãµããŒããæ¹åããå¿ èŠããããŸãã
ããããããã«ã€ããŠã¯æ¬¡ã®èšäºã§èª¬æããŸãã