Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓà Make ¹¹½¨ÍøÕ¾
 
  2422  次浏览      19
 2017-12-8 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚÈîÒ»·å,ÎÄÕÂÖ÷Òª½²½âÁ˹¹½¨µÄÁ÷³Ì£¬Ã¿¸ö²½Öè½éÉܵĽÏΪÏêϸ£¬Ï£Íû¶Ô´ó¼ÒÓаïÖú¡£

ÍøÕ¾¿ª·¢Õý±äµÃÔ½À´Ô½×¨Òµ£¬Éæ¼°µ½¸÷ÖÖ¸÷ÑùµÄ¹¤¾ßºÍÁ÷³Ì£¬ÆÈÇÐÐèÒª¹¹½¨×Ô¶¯»¯¡£

Ëùν"¹¹½¨×Ô¶¯»¯"£¬¾ÍÊÇָʹÓù¹½¨¹¤¾ß£¬×Ô¶¯ÊµÏÖ"´ÓÔ´Âëµ½ÍøÒ³"µÄ¿ª·¢Á÷³Ì¡£ÕâÓÐÀûÓÚÌá¸ß¿ª·¢Ð§ÂÊ¡¢¸ÄÉÆ´úÂëÖÊÁ¿¡£

±¾ÎĽéÉÜÈçºÎʹÓÃ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¼ì²éÕâЩÎļþ¡£

ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£

$ make lint

Î塢ģ°å±àÒë

µÚ¶þ¸öÈÎÎñÊ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£©¡£

ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£

$ make template

Áù¡¢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 ¡£

ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£

$ make coffee

Æß¡¢ºÏ²¢Îļþ

ʹÓÃcatÃüÁºÏ²¢¶à¸öÎļþ¡£

JS_FILES := $(wildcard build/*.js)
OUTPUT := build/bundle.js

concat: $(JS_FILES)
cat $^ > $(OUTPUT)

ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£

$ make concat

°Ë¡¢Ñ¹ËõJavaScript½Å±¾

½«ËùÓÐJavaScript½Å±¾£¬Ñ¹ËõΪbuildĿ¼ÏµÄapp.js¡£

app_bundle := build/app.js

$(app_bundle): $(build_files) $(template_js)
uglifyjs -cmo $@ $^

min: $(app_bundle)

ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£

$ make min

»¹ÓÐÁíÒ»ÖÖд·¨£¬¿ÉÒÔÁíÐÐÖ¸¶¨Ñ¹Ëõ¹¤¾ß¡£

UGLIFY ?= uglify

$(app_bundle): $(build_files) $(template_js)
$(UGLIFY) -cmo $@ $^

ÉÏÃæ´úÂ뽫ѹËõ¹¤¾ßuglify·ÅÔÚ±äÁ¿UGLIFY¡£×¢Ò⣬±äÁ¿µÄ¸³Öµ·ûÊÇ ?= £¬±íʾÕâ¸ö±äÁ¿¿ÉÒÔ±»ÃüÁîÐвÎÊý¸²¸Ç¡£

µ÷ÓÃʱÕâÑùд¡£

$ make UGLIFY=node_modules/.bin/jsmin min

ÉÏÃæ´úÂ룬½«jsminÃüÁî¸ø±äÁ¿UGLIFY£¬Ñ¹Ëõʱ¾Í»áʹÓÃjsminÃüÁî¡£

¾Å¡¢É¾³ýÁÙʱÎļþ

¹¹½¨½áÊøÇ°£¬É¾³ýËùÓÐÁÙʱÎļþ¡£

clean:
rm -rf build

ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£

$ make clean

Ê®¡¢²âÊÔ

¼Ù¶¨²âÊÔ¹¤¾ßÊÇmocha£¬ËùÓвâÊÔÓÃÀý·ÅÔÚtestĿ¼Ï¡£

test: $(app_bundle) $(test_js)
mocha

µ±½Å±¾ºÍ²âÊÔÓÃÀý¶¼´æÔÚ£¬ÉÏÃæ´úÂë¾Í»áÖ´ÐÐmocha¡£

ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£

$ make test

ʮһ¡¢¶àÈÎÎñÖ´ÐÐ

¹¹½¨¹ý³ÌÐèÒªÒ»´ÎÐÔÖ´Ðжà¸öÈÎÎñ£¬¿ÉÒÔÖ¸¶¨Ò»¸ö¶àÈÎÎñÄ¿±ê¡£

build: template concat min clean

ÉÏÃæ´úÂ뽫buildÖ¸¶¨ÎªÖ´ÐÐÄ£°å±àÒë¡¢ÎļþºÏ²¢¡¢½Å±¾Ñ¹Ëõ¡¢É¾³ýÁÙʱÎļþËĸöÈÎÎñ¡£

ʹÓÃʱµ÷ÓÃÏÂÃæµÄÃüÁî¡£

$ make build

Èç¹ûÕâÐйæÔòÔÚMakefileµÄ×îÇ°Ã棬ִÐÐʱ¿ÉÒÔÊ¡ÂÔÄ¿±êÃû¡£

$ make

ͨ³£Çé¿öÏ£¬makeÒ»´ÎÖ´ÐÐÒ»¸öÈÎÎñ¡£Èç¹ûÈÎÎñ¶¼ÊǶÀÁ¢µÄ£¬»¥ÏàûÓÐÒÀÀµ¹Øϵ£¬¿ÉÒÔÓòÎÊý -j Ö¸¶¨Í¬Ê±Ö´Ðжà¸öÈÎÎñ¡£

$ make -j build

Ê®¶þ¡¢ÉùÃ÷αÎļþ

×îºó£¬ÎªÁË·ÀֹĿ±êÃûÓëÏÖÓÐÎļþ³åÍ»£¬ÏÔʽÉùÃ÷ÄÄЩĿ±êÊÇαÎļþ¡£

.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

   
2422 ´Îä¯ÀÀ       19
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ