±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚÈîÒ»·å,ÎÄÕÂÖ÷Òª½²½âÁ˹¹½¨µÄÁ÷³Ì£¬Ã¿¸ö²½Öè½éÉܵĽÏΪÏêϸ£¬Ï£Íû¶Ô´ó¼ÒÓаïÖú¡£ |
|
ÍøÕ¾¿ª·¢Õý±äµÃÔ½À´Ô½×¨Òµ£¬Éæ¼°µ½¸÷ÖÖ¸÷ÑùµÄ¹¤¾ßºÍÁ÷³Ì£¬ÆÈÇÐÐèÒª¹¹½¨×Ô¶¯»¯¡£
Ëùν"¹¹½¨×Ô¶¯»¯"£¬¾ÍÊÇָʹÓù¹½¨¹¤¾ß£¬×Ô¶¯ÊµÏÖ"´ÓÔ´Âëµ½ÍøÒ³"µÄ¿ª·¢Á÷³Ì¡£ÕâÓÐÀûÓÚÌá¸ß¿ª·¢Ð§ÂÊ¡¢¸ÄÉÆ´úÂëÖÊÁ¿¡£
±¾ÎĽéÉÜÈçºÎʹÓÃmakeÃüÁ×÷ÎªÍøÕ¾µÄ¹¹½¨¹¤¾ß¡£ÒÔÏÂÄÚÈݼÈÊÇmakeÓï·¨µÄʵÀý£¬Ò²ÊÇÍøÕ¾¹¹½¨µÄʵս½Ì³Ì¡£ÄãÍêÈ«¿ÉÒÔ½«´úÂëÂÔ×÷Ð޸ģ¬¿½±´µ½×Ô¼ºµÄÏîÄ¿¡£

£¨Ìâͼ£º¹ú¼Ò¿¼¹Å²©Îï¹Ý£¬Î÷°àÑÀ£¬ÉãÓÚ2014Äê8Ô£©
Ò»¡¢MakeµÄÓŵã
Ê×ÏȽâÊÍһϣ¬ÎªÊ²Ã´ÒªÓÃMake¡£
Ŀǰ£¬ÍøÕ¾ÏîÄ¿£¨ÓÈÆäÊÇNode.jsÏîÄ¿£©ÓÐÈýÖÖ¹¹½¨·½°¸¡£
·½°¸Ò»£º»ùÓÚNode.jsµÄרÓù¹½¨¹¤¾ß£¨Grunt¡¢Gulp¡¢Brunch¡¢Broccoli¡¢Mimosa£©
·½°¸¶þ£ºnpm runÃüÁ½Ì³Ì1¡¢2¡¢3£©
·½°¸Èý£ºmakeÃüÁî |
ÎÒ¾õµÃ£¬makeÊÇ´óÐÍÏîÄ¿µÄÊ×Ñ¡·½°¸¡£npm run¿ÉÒÔÈÏΪÊÇmakeµÄ¼ò»¯ÐÎʽ£¬Ö»ÊÊÓÃÓÚ¼òµ¥ÏîÄ¿£¬¶øGrunt¡¢GulpÄÇÑùµÄ¹¤¾ß£¬ÓкܶàÎÊÌâ¡£
£¨1£©²å¼þÎÊÌâ
GruntºÍGulpµÄ²Ù×÷£¬¶¼Óɲå¼þÍê³É¡£¼´Ê¹ÊÇÎļþ¸ÄÃûÕâÑù¼òµ¥µÄÈÎÎñ£¬¶¼ÒªÐ´²å¼þ£¬Ï൱Âé·³¡£¶øMakeÊÇÖ±½Óµ÷ÓÃÃüÁîÐУ¬¸ù±¾²»Óõ£ÐÄÕÒ²»µ½²å¼þ¡£
£¨2£©¼æÈÝÐÔÎÊÌâ
²å¼þµÄ°æ±¾£¬±ØÐëÓëGruntºÍGulpµÄ°æ±¾Æ¥Å䣬»¹±ØÐëÓë¶ÔÓ¦µÄÃüÁîÐгÌÐòÆ¥Åä¡£±ÈÈ磬grunt-contrib-jshint²å¼þÏÖÔÚÊÇ0.11.0°æ£¬¶ÔÓ¦Grunt
0.4.5°æºÍJSHint 2.6.0°æ¡£ÍòÒ»GruntºÍJSHintÉý¼¶£¬¶ø²å¼þûÓÐÉý¼¶£¬¾ÍÓпÉÄܳöÏÖ¼æÈÝÐÔÎÊÌâ¡£MakeÊÇÖ±½Óµ÷ÓÃJSHint£¬²»´æÔÚÕâ¸öÎÊÌâ¡£
£¨3£©Óï·¨ÎÊÌâ
GruntºÍGulp¶¼ÓÐ×Ô¼ºµÄÓï·¨£¬²¢²»ÈÝÒ×ѧ£¬ÓÈÆäÊÇGrunt£¬Óï·¨ºÜÂÞ࣬ºÜÄÑÒ»ÑÛ¿´³öÀ´´úÂëµÄÒâͼ¡£µ±È»£¬makeÒ²²»ÈÝÒ×ѧ£¬µ«ËüÓи´ÓÃÐÔ£¬Ñ§»áÁË»¹¿ÉÒÔÓÃÔÚÆäËû³¡ºÏ¡£
£¨4£©¹¦ÄÜÎÊÌâ
makeÒѾʹÓÃÁ˼¸Ê®Ä꣬ȫÊÀ½çÎÞÊýµÄ´óÏîÄ¿¶¼ÓÃËü¹¹½¨£¬Ôç¾ÍÖ¤Ã÷·Ç³£¿É¿¿£¬¸÷ÖÖÇé¿ö¶¼Óа취½â¾ö£¬Ç°ÈËÀÛ»ýµÄ¾ÑéºÍ×ÊÁÏÒ²·Ç³£·á¸»¡£Ïà±È֮ϣ¬GruntºÍGulpµÄÀúÊ·¶¼²»³¤£¬Ê¹Ó÷¶Î§ÓÐÏÞ£¬Ä¿Ç°»¹Ã»ÓгöÏÖËüÃÇÄÜ×ö¡¢¶ømake×ö²»µ½µÄÈÎÎñ¡£
»ùÓÚÒÔÉÏÀíÓÉ£¬ÎÒ¿´ºÃmake¡£
¶þ¡¢³£¼ûµÄ¹¹½¨ÈÎÎñ
ÏÂÃæÊÇһЩ³£¼ûµÄÍøÕ¾¹¹½¨ÈÎÎñ¡£
¼ì²éÓï·¨
±àÒëÄ£°å
תÂë
ºÏ²¢
ѹËõ
²âÊÔ
ɾ³ý |
ÕâЩÈÎÎñÓõ½ JSHint¡¢handlebars¡¢CoffeeScript¡¢uglifyjs¡¢mocha
µÈ¹¤¾ß¡£¶ÔÓ¦µÄpackage.jsonÎļþÈçÏ¡£
"devDependencies": { "coffee-script":
"~1.9.1", "handlebars":
"~3.0.0", "jshint": "^2.6.3",
"mocha": "~2.2.1", "uglify-js":
"~2.4.17"
} |
ÎÒÃÇÀ´¿´¿´£¬Make ÃüÁîÔõôÍê³ÉÕâЩ¹¹½¨ÈÎÎñ¡£
Èý¡¢MakefileµÄͨÓÃÅäÖÃ
¿ªÊ¼¹¹½¨Ö®Ç°£¬Òª±àдMakefileÎļþ¡£ËüÊÇmakeÃüÁîµÄÅäÖÃÎļþ¡£ËùÓÐÈÎÎñµÄ¹¹½¨¹æÔò£¬¶¼Ð´ÔÚÕâ¸öÎļþ£¨²Î¼û¡¶Make
ÃüÁî½Ì³Ì¡·£©¡£
Ê×ÏÈ£¬Ð´ÈëÁ½ÐÐͨÓÃÅäÖá£
PATH := node_modules/.bin:$(PATH)
SHELL := /bin/bash |
ÉÏÃæ´úÂëµÄPATHºÍSHELL¶¼ÊÇBASH±äÁ¿¡£ËüÃDZ»ÖØÐ¸³Öµ¡£
PATH±äÁ¿ÖØÐ¸³ÖµÎª£¬ÓÅÏÈÔÚ nodemodules/.bin Ŀ¼ѰÕÒÃüÁî¡£ÕâÊÇÒòΪ£¨µ±Ç°ÏîÄ¿µÄ£©nodeÄ£¿é£¬»áÔÚ
nodemodules/.bin Ŀ¼ÉèÖÃÒ»¸ö·ûºÅÁ´½Ó¡£PATH±äÁ¿Ö¸ÏòÕâ¸öĿ¼ÒԺ󣬵÷Óø÷ÖÖÃüÁî¾Í²»ÓÃд·¾¶ÁË¡£±ÈÈ磬µ÷ÓÃJSHint£¬¾Í²»ÓÃд
~/node_modules/.bin/jshint £¬Ö»Ð´ jshint ¾ÍÐÐÁË¡£
SHELL±äÁ¿Ö¸¶¨¹¹½¨»·¾³Ê¹ÓÃBASH¡£
ËÄ¡¢¼ì²éÓï·¨´íÎó
µÚÒ»¸öÈÎÎñÊÇ£¬¼ì²éÔ´ÂëÓÐûÓÐÓï·¨´íÎó¡£
js_files = $(shell find ./lib -name '*.js')
lint: $(js_files)
jshint $? |
ÉÏÃæ´úÂëÖУ¬shellº¯Êýµ÷ÓÃfindÃüÁÕÒ³ölibĿ¼ÏÂËùÓÐjsÎļþ£¬±£´æÔÚ±äÁ¿js_files¡£È»ºó£¬¾Í¿ÉÒÔÓÃjshint¼ì²éÕâЩÎļþ¡£
ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£
Î塢ģ°å±àÒë
µÚ¶þ¸öÈÎÎñÊDZàÒëÄ£°å¡£¼Ù¶¨Ä£°å¶¼ÔÚtemplatesĿ¼£¬ÐèÒª±àÒëΪbuildĿ¼ÏµÄtemplates.jsÎļþ¡£
build/templates.js:
templates/*.handlebars
mkdir -p $(dir $@)
handlebars templates/*.handlebars > $@
template: build/templates.js |
ÉÏÃæ´úÂë²é¿´buildĿ¼ÊÇ·ñ´æÔÚ£¬Èç¹û²»´æÔÚ¾Íн¨Ò»¸ö¡£dirº¯ÊýÓÃÓÚÈ¡³ö¹¹½¨Ä¿±êµÄ·¾¶Ãû£¨build£©£¬ÄÚÖñäÁ¿$@´ú±í¹¹½¨Ä¿±ê£¨build/templates.js£©¡£
ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£
Áù¡¢Coffee½Å±¾×ªÂë
µÚÈý¸öÈÎÎñÊÇ£¬½«CofferScript½Å±¾×ªÎªJavaScript½Å±¾¡£
source_files
:= $(wildcard lib/*.coffee)
build_files := $(source_files:lib/%.coffee=build/%.js)
build/%.js: lib/%.coffee
coffee -co $(dir $@) $<
coffee: $(build_files) |
ÉÏÃæ´úÂëÖУ¬Ê×ÏÈ»ñÈ¡ËùÓеÄCoffee½Å±¾Îļþ£¬´æ·ÅÔÚ±äÁ¿sourcefiles£¬º¯ÊýwildcardÓÃÀ´À©Õ¹Í¨Åä·û¡£È»ºó£¬½«±äÁ¿sourcefilesÖеÄcoffeeÎļþÃû£¬Ìæ»»³ÉjsÎļþÃû£¬¼´
lib/x.coffee Ìæ»»³É build/x.js ¡£
ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£
Æß¡¢ºÏ²¢Îļþ
ʹÓÃcatÃüÁºÏ²¢¶à¸öÎļþ¡£
JS_FILES :=
$(wildcard build/*.js)
OUTPUT := build/bundle.js
concat: $(JS_FILES)
cat $^ > $(OUTPUT) |
ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£
°Ë¡¢Ñ¹ËõJavaScript½Å±¾
½«ËùÓÐJavaScript½Å±¾£¬Ñ¹ËõΪbuildĿ¼ÏµÄapp.js¡£
app_bundle := build/app.js
$(app_bundle): $(build_files) $(template_js)
uglifyjs -cmo $@ $^
min: $(app_bundle) |
ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£
»¹ÓÐÁíÒ»ÖÖд·¨£¬¿ÉÒÔÁíÐÐÖ¸¶¨Ñ¹Ëõ¹¤¾ß¡£
UGLIFY ?= uglify
$(app_bundle): $(build_files) $(template_js)
$(UGLIFY) -cmo $@ $^ |
ÉÏÃæ´úÂ뽫ѹËõ¹¤¾ßuglify·ÅÔÚ±äÁ¿UGLIFY¡£×¢Ò⣬±äÁ¿µÄ¸³Öµ·ûÊÇ ?= £¬±íʾÕâ¸ö±äÁ¿¿ÉÒÔ±»ÃüÁîÐвÎÊý¸²¸Ç¡£
µ÷ÓÃʱÕâÑùд¡£
$ make UGLIFY=node_modules/.bin/jsmin
min |
ÉÏÃæ´úÂ룬½«jsminÃüÁî¸ø±äÁ¿UGLIFY£¬Ñ¹Ëõʱ¾Í»áʹÓÃjsminÃüÁî¡£
¾Å¡¢É¾³ýÁÙʱÎļþ
¹¹½¨½áÊøÇ°£¬É¾³ýËùÓÐÁÙʱÎļþ¡£
ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£
Ê®¡¢²âÊÔ
¼Ù¶¨²âÊÔ¹¤¾ßÊÇmocha£¬ËùÓвâÊÔÓÃÀý·ÅÔÚtestĿ¼Ï¡£
test: $(app_bundle)
$(test_js)
mocha |
µ±½Å±¾ºÍ²âÊÔÓÃÀý¶¼´æÔÚ£¬ÉÏÃæ´úÂë¾Í»áÖ´ÐÐmocha¡£
ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£
ʮһ¡¢¶àÈÎÎñÖ´ÐÐ
¹¹½¨¹ý³ÌÐèÒªÒ»´ÎÐÔÖ´Ðжà¸öÈÎÎñ£¬¿ÉÒÔÖ¸¶¨Ò»¸ö¶àÈÎÎñÄ¿±ê¡£
build: template
concat min clean |
ÉÏÃæ´úÂ뽫buildÖ¸¶¨ÎªÖ´ÐÐÄ£°å±àÒë¡¢ÎļþºÏ²¢¡¢½Å±¾Ñ¹Ëõ¡¢É¾³ýÁÙʱÎļþËĸöÈÎÎñ¡£
ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£
Èç¹ûÕâÐйæÔòÔÚMakefileµÄ×îÇ°Ãæ£¬Ö´ÐÐʱ¿ÉÒÔÊ¡ÂÔÄ¿±êÃû¡£
ͨ³£Çé¿öÏ£¬makeÒ»´ÎÖ´ÐÐÒ»¸öÈÎÎñ¡£Èç¹ûÈÎÎñ¶¼ÊǶÀÁ¢µÄ£¬»¥ÏàûÓÐÒÀÀµ¹ØÏµ£¬¿ÉÒÔÓòÎÊý -j Ö¸¶¨Í¬Ê±Ö´Ðжà¸öÈÎÎñ¡£
Ê®¶þ¡¢ÉùÃ÷αÎļþ
×îºó£¬ÎªÁË·ÀֹĿ±êÃûÓëÏÖÓÐÎļþ³åÍ»£¬ÏÔʽÉùÃ÷ÄÄЩĿ±êÊÇαÎļþ¡£
.PHONY: lint
template coffee concat min test clean build |
Ê®Èý¡¢MakefileÎļþʾÀý
ÏÂÃæÊÇÁ½¸ö¼òµ¥µÄMakefileÎļþ£¬ÓÃÀ´²¹³ämakeÃüÁîµÄÆäËû¹¹½¨ÈÎÎñ¡£
ʵÀýÒ»¡£
PROJECT = "My
Fancy Node.js project"
all: install test server
test: ;@echo "Testing ${PROJECT}.....";
\
export NODE_PATH=.; \
./node_modules/mocha/bin/mocha;
install: ;@echo "Installing ${PROJECT}.....";
\
npm install
update: ;@echo "Updating ${PROJECT}.....";
\
git pull --rebase; \
npm install
clean : ;
rm -rf node_modules
.PHONY: test server install clean update |
ʵÀý¶þ¡£
all: build-js
build-css
build-js:
browserify -t brfs src/app.js > site/app.js
build-css:
stylus src/style.styl > site/style.css
.PHONY build-js build-css |
|