精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何利用一個周末時間成為前端工程師的

開發 前端
我認為一個前端工程師需要的唯一東西是一個好用的 API,和一個全面的文檔。作為一個后臺開發者,你必須提供這兩個。所以,前端的工程師的水平取決于你。但是,不要迫使你的前端人員去使用你的工具。

2周前,我將 TravisLight 開源了,這是一個建立監控的工具,也是一個用于 Travis-CI 的構件監控工具。出于興趣,我用了一個周末的時間做了這個項目,而且我是以一個真正的前端開發者的角色來做的。

當我在 Nelmio 的時候,盡管我做了一些javascript的應用,但我參與的更多是后臺開發。大部分時間我是在寫API給前端調用,而且在工作中經常會出現偏差。實際上,我認為每一個做后臺的開發者應該花些時間在前段開發上,補充一些前端知識,反之亦然。這是讓你明白在工作中自己真正需要做些什么的最好的方法之一。

我認為一個前端工程師需要的唯一東西是一個好用的 API,和一個全面的文檔。作為一個后臺開發者,你必須提供這兩個。所以,前端的工程師的水平取決于你。但是,不要迫使你的前端人員去使用你的工具。的確,Assetic 對于 PHP 是一個很好的開發工具,但是它對于前端工程師來說并不是一個好的工具。有許多更好的開發工具可以編譯 JS/CSS 文件,寫 JavaScript,例如 Grunt。讓你前端工程師使用自己的工具吧!在一個 Symfony2 項目中,我會命令把所有的 JS/CSS 文件都放在 web/ 的文件夾中,而不是放在 *Bundle/Resouces/public 這樣的文件夾中,這樣,前端就不用為了找 JS/CSS 文件夾而去瀏覽整個項目了。

但這不是我寫這篇文章的目的,讓我來解釋我為什么和怎樣寫出 TravisLight 和我發現的工具吧。

最初

我想學習一下Backbone.js,因此我著手閱讀了Backbone Fundamentals這本書。如果你對Backbone還不甚了解,那我給你介紹下,Backbone 是一個JavaScript 框架,它可以為你編寫Web程序提供一個架構.

眾所周知,在項目中實踐是最佳的編程學習方式,因此,我決定使用Travis-CI API去寫一個Backbone.js 應用程序,也就是TravisLight 。TravisLight 正是那個我一直想要的,用來管理我的開源項目的簡明工具。這真是一個絕佳的起步項目,尤其適合在周末進行。

我使用了Lo-Dash,一個Underscore.js的替代品,它具有風格一致,定制靈活,性能優越等優點。同時,我也使用了RequireJS和Moment.js。這樣,我就需要一個工具去管理所有的這些依賴,因此我關注了下來自Twitter的Bower。

Bower,網頁包管理器

Bower是一個網頁包管理器,也就是JS/CSS庫包管理器。雖說它現在是一個包下載器,但還是有必要用它來避免對 jQuery, Twitter Bootstrap等進行版本控制。你只需要一個像這樣的component.json文件:

  1. {  
  2.   "name": "travis-light",  
  3.   "dependencies": {  
  4.     "jquery": "~1.8.3"  
  5.   }  

運行“bower install”把依賴關系安裝到組件或文件夾。 現在,我可以開始著重弄我的應用。每次我需要一個新的庫只要運行“ bower install--save”來安裝和更新“component.json”文件就行了。 有時候,我需要使用一些工具幫助我在應用上完成一些像運行jshint或編譯文件的任務。于是我試了“Grunt”——一個Javascript編譯工具,感覺還不錯哦。

Grunt, JavaScript 編譯工具

Grunt是一個基于任務的命令行 JavaScript 工程編譯工具. 第一眼看上去, 這個工具似乎難以使用,但是一旦你用了,它太棒了!你能夠驗證(Lint)你的文件,縮小JS/CSS文件,運行測試單元等等。

在TravisLight,我主要使用Grunt 打包應用程序. 打包應用程序意味著:

  • 編譯JavaScript文件;
  • 編譯 CSS 文件;
  • 在 HTML 標記中使用編譯好的文件;
  • 復制依賴庫.

編譯Javascript文件就是編譯 RequireJS  的依賴關系。幸虧有 grunt-contrib-requirejs插件,太簡單了!

  1. requirejs: {  
  2.     compile: {  
  3.         options: {  
  4.             name: "main",  
  5.             baseUrl: "js/",  
  6.             mainConfigFile: "js/main.js",  
  7.             out: "dist/compiled.js"  
  8.         }  
  9.     }  

在TravisLight 里面編譯CSS有兩步: 

首先、把CSS里面的所有圖片用grunt-image-embed 插件嵌進來:

  1. imageEmbed: {  
  2.     application: {  
  3.         src: 'css/application.css',  
  4.         dest: 'dist/application-embed.css',  
  5.         deleteAfterEncoding : false  
  6.     }  

然后,用grunt-contrib-mincss  插件壓縮CSS文件;

  1. mincss: {  
  2.     compress: {  
  3.         files: {  
  4.             'dist/compiled.css': [  
  5.                 'css/bootstrap.min.css',  
  6.                 'dist/application-embed.css'  
  7.             ]  
  8.         }  
  9.     }  

現在,為了使用那些編譯過的JS和CSS文件,我用 grunt-targethtml 插件編譯HTML。

  1. targethtml: {  
  2.     dist: {  
  3.         src: 'index.html',  
  4.         dest: 'dist/index.html'  
  5.     }  

index.html文件如下:

  1. <!doctype html> 
  2. <html lang="en"> 
  3.     ...  
  4.  
  5.     <body data-api-url="https://api.travis-ci.org"> 
  6.         <!--(if target dist)> 
  7.         <script data-main="compiled" src="js/require.js"></script> 
  8.         <!(endif)--> 
  9.         <!--(if target dummy)><!--> 
  10.         <script data-main="js/main" src="components/requirejs/require.js"></script> 
  11.         <!--<!(endif)--> 
  12.     </body> 
  13. </html> 

arget dummy 是用于開發的一段默認代碼。這是一種維持單個HTML文件從開發到成品過程中(或其他任何你想實現的環境)不變的好方式。在找到這個插件之前我一直不知道該怎么辦。

最后,我又用 grunt-contrib-copy 插件實現復制一些文件到dist/ 文件夾。

  1. copy: {  
  2.     dist: {  
  3.         files: {  
  4.             'dist/js/require.js': 'components/requirejs/require.js'  
  5.         }  
  6.     }  

運行 grunt package 執行所有任務。查看 TravisLight的 grunt.js 文件可以獲得更多細節尤其是一些別名。

這時候,我的Javascript應用已經跑起來了。我看了看一些Javascript測試庫。雖然我對QUnit 有所了解但我還是想用一些沒用過的,于是我是試了 Mocha 和 Chai

#p#

測試Backbone.js主應用

在Javascript世界里,有大量的測試庫像 QUnit, Mocha, Jasmine, Chai, Sinon.js, Expect.js, Should.js等等。

我試了Mocha 和 Chai。使用 NPMNode.js 包管理器可以安裝這些庫。NPM 需要一個 package.json 文件維持項目列表的依賴關系和設備驅動程序的依賴關系:

  1. {  
  2.   "name""TravisLight",  
  3.   "version""0.0.1",  
  4.   "dependencies": {  
  5.   },  
  6.   "devDependencies": {  
  7.     "mocha""~1.7.4",  
  8.     "chai""~1.4.0" 
  9.   }  

運行npm install在node_modules/目錄下安裝Mocha 和 Chai。

現在你需要一個 test/index.html 文件在瀏覽器中跑這個測試。

  1. TravisLight Test Suite  
  2.  
  3.    
  4.    
  5.  <div> 
  6.       
  7.  
  8.    
  9.    
  10.  </div> 

首先,在加載完jQuery 和 RequireJS后加載Mocha 和 Chai。然后加載一個 setup.js 文件,它包含了Mocha 和 RequireJS 的配置文件,和在這個測試文件中用到的兩個全局變量assert 和 expect:

  1. var assert = chai.assert,  
  2.     expect = chai.expect;  
  3.  
  4. mocha.setup({  
  5.     ui: 'bdd' 
  6. });  
  7.  
  8. require.config({  
  9.     baseUrl: '../js/',  
  10.  
  11.     ...  
  12. }); 

我決定嘗試行為驅動開發(BDD)模式,不過只只是一種嘗試。這里有一個 TravisLight 路由測試文件的例子:

  1. define(  
  2.     [  
  3.         'router' 
  4.     ],  
  5.     function (router) {  
  6.         "use script";  
  7.  
  8.         describe('router'function () {  
  9.             it('should be an instance of Backbone.Router'function () {  
  10.                 expect(router).to.be.an.instanceOf(Backbone.Router);  
  11.             });  
  12.  
  13.             it('should have a routes property'function () {  
  14.                 expect(router.routes).to.be.an('object');  
  15.             });  
  16.         });  
  17.     }  
  18. );  

要是你想了解更多,可以看看test/directory 目錄。

成功!哈,我寫了一個JavaScript應用程序測試。

在Javascript項目中使用Travis-CI

我是Travis-CI的超級粉絲,我打算將TravisLight加入其中。而Grunt使得這變得非常簡單。

grunt-mocha插件能夠使用MochaPhantomJS進行測試。下面是這個插件在TravisLight中的配置

  1. mocha: {  
  2.     all: [ 'test/index.html' ]  

一個簡單的grunt mocha 示例如下(使用了PhantomJS):

  1. $ grunt mocha  
  2. Running "mocha:all" (mocha) task  
  3. Testing index.html...................OK  
  4. >> 19 assertions passed (0.14s)  
  5.  
  6. Done, without errors. 

還不錯。然而,Travis-CI需要通過一個.travis.yml文件進行配置。Javascript項目需要node_js環境來支持Travis-CI,并且需要通過Bower安裝一系列的庫來運行應用程序:

  1. language: node_js  
  2.  
  3. node_js:  
  4.     - 0.8  
  5.  
  6. before_script:  
  7.     - export PATH=$PATH:`npm bin`  
  8.     - bower install 

Travis-CI 首先運行npm install,然后運行npm test。第二個命令需要在TravisLight的package.json中進行配置

  1. {  
  2.   ...  
  3.  
  4.   "scripts": {  
  5.     "test": "./node_modules/grunt/bin/grunt test"  
  6.   }  

結尾

我真的很享受作為一個前端工程師的經歷,并且我愛上了JavaScript 社區。如今,有大量超贊的Javascript庫和框架,顯然我沒有足夠的時間去一一嘗試。

起初,我將這篇博客命名為JavaScript from the trenches,因為我決定將我所了解的Javascript內容重新學習一遍。我從來不認為自己是一個前端工程師,抑或Javascript開發工程師。我總是頻繁地碰到這樣一類人,他們認為JavaScript/CSS太簡單了,不值得一學。我想他們誤入歧途了,我對真正的前端工程師總是懷著無比崇敬的心情。

總的來說,這段經歷改變了我對API的想法。此外,進行一個真實的項目,盡管是像TravisLight這樣的小項目,使我的大腦更加靈活,我從來沒有這么快了解新事物。

順便說一下,如果你發現任何錯誤,請fork并且編輯這篇博客。非常感謝!

英文原文:Being A Frontend Developer For A WeekEnd

譯文鏈接:http://www.oschina.net/translate/being-a-frontend-developer-for-a-weekend

責任編輯:林師授 來源: OSCHINA
相關推薦

2015-08-17 10:32:06

前端工程師優秀

2015-08-24 09:02:49

前端工程師

2021-01-31 17:36:07

前端工程師職位

2016-01-28 11:18:09

卓越前端工程師

2013-01-14 09:51:56

架構設計前端重構工程師

2012-11-29 10:05:20

2021-02-01 22:23:06

前端工程師開發

2021-01-18 09:00:00

人工智能機器學習工程師

2015-08-26 14:18:25

Web前端工程師價值

2016-09-22 16:14:45

前端設計Photoshop

2018-03-29 11:23:25

IT人員云計算工程師

2019-06-24 09:40:17

前端前端工程師開發工具

2009-03-20 09:32:52

系統集成工程師素質

2015-09-30 10:25:03

前端工程師

2016-02-25 11:42:19

2019-03-05 09:57:08

php編程語言工程師

2023-08-29 23:50:48

2013-08-01 10:58:53

2014-05-13 13:42:54

工程師流程管理

2017-04-14 10:37:21

點贊
收藏

51CTO技術棧公眾號

日韩欧美精品久久| 日韩av毛片网| 国产精品久久无码| 三上悠亚激情av一区二区三区 | av电影网站在线观看| 95精品视频| 欧美日韩国产影院| 综合久久国产| 天堂av在线播放| 黄色日韩网站视频| 欧美亚洲视频在线观看| 国产av 一区二区三区| 日韩成人动漫在线观看| 欧美精品免费视频| 国产91在线视频观看| av在线看片| 亚洲国产精品v| 国产伦精品一区二区三区高清版 | 亚洲国产日韩欧美在线99| 国产一级不卡毛片| gogo高清在线播放免费| 国产精品国产三级国产普通话蜜臀| 超碰在线观看97| 在线播放一级片| 在线亚洲伦理| 欧美激情高清视频| 成人免费黄色小视频| 欧美色蜜桃97| 国产亚洲精品久久| 97人妻精品一区二区三区免| 亚洲日本va午夜在线电影| 欧美亚洲国产bt| 男人靠女人免费视频网站| 四虎影院观看视频在线观看 | 国产午夜精品视频一区二区三区| 春暖花开成人亚洲区| www.亚洲色图| 国产精品二区在线| av老司机久久| 国产在线视频一区二区| 国产美女搞久久| 中文在线观看免费高清| 米奇777在线欧美播放| 2021久久精品国产99国产精品| 日本少妇高清视频| 亚洲一本二本| 不用播放器成人网| www.av免费| 中文精品电影| 精品自在线视频| 国产这里有精品| 午夜精品网站| 久久久免费精品视频| 免费视频一二三区| 在线看片欧美| 韩国三级电影久久久久久| 久久精品人妻一区二区三区| 亚洲午夜一区| 555www成人网| 国产成人无码av| 丝袜a∨在线一区二区三区不卡| 欧美一区二区三区……| 伊人中文字幕在线观看| 久久蜜桃精品| 国产精品久久久久久久久男| 一区二区视频网| 国产一区二区视频在线| yellow视频在线观看一区二区| 亚洲精品一区二区三区不卡| 成人午夜免费av| 久久综合久久久| 91福利在线视频| 亚洲色图另类专区| 日韩精品在线观看av| 一区二区三区四区日本视频| 在线观看视频91| 中文字幕在线观看日| 综合成人在线| 亚洲美女www午夜| 男人天堂资源网| 影音先锋一区| 日韩av电影院| 国产精品久久久久毛片| 成人美女视频在线观看| 欧美日韩国产精品一卡| 国产在线观看a| 午夜精品一区二区三区免费视频| 日本爱爱免费视频| 亚洲国产aⅴ精品一区二区| 日韩精品亚洲元码| 成人自拍小视频| 亚洲日产国产精品| 国产精品露脸自拍| 亚洲欧美高清视频| 国产欧美日韩在线视频| 成年在线观看视频| 成人啊v在线| 欧美成人video| 亚洲一级理论片| 亚洲日本成人| 2014亚洲精品| 国产一级片在线| 亚洲午夜国产一区99re久久| 欧美成人黑人猛交| 伊人久久影院| 中文字幕亚洲一区| 久久久久久久久久久久久久av| 久久国产精品色婷婷| 精品免费一区二区三区蜜桃| 欧美日韩在线看片| 色婷婷av一区二区三区gif| 国产人妻精品午夜福利免费| 日本高清免费电影一区| 69视频在线播放| 亚洲经典一区二区| 国产精品免费视频观看| avav在线看| eeuss国产一区二区三区四区| 伊人一区二区三区久久精品| 日韩欧美亚洲视频| 国产成人午夜视频| 一区二区三区我不卡| 中文在线最新版地址| 欧美tk丨vk视频| 国产精品国产精品88| 日本亚洲最大的色成网站www| 久久国产精品一区二区三区四区| av中文字幕在线观看| 欧美日韩亚洲综合在线 | 天天操天天干天天干| 亚洲精品国产无天堂网2021| 久久撸在线视频| 日韩精品久久久久久久电影99爱| 秋霞av国产精品一区| 天堂在线中文资源| 黄网动漫久久久| 国产精品入口麻豆| 在线日韩视频| 国产伦精品一区二区三区视频免费| av官网在线播放| 91精品免费观看| www.av免费| 国内精品久久久久影院色| 一区二区三区四区| 色综合.com| 久久久精品2019中文字幕神马| 中文字幕人妻一区二区三区视频| 国产亚洲精品中文字幕| 无码精品国产一区二区三区免费| 欧美网色网址| **欧美日韩vr在线| 免费看男男www网站入口在线 | 欧美日韩中文在线视频| 西野翔中文久久精品字幕| 欧美在线视频在线播放完整版免费观看 | 青娱乐国产盛宴| 成人免费高清在线观看| 波多野结衣之无限发射| 亚洲精品中文字幕99999| 日本一区二区在线免费播放| 成人免费在线电影| 91麻豆精品国产91久久久 | 日韩欧美在线观看| 在线观看国产精品一区| 男人的天堂久久精品| 天天综合五月天| 久久精品福利| 国产精品成熟老女人| 欧美黄色激情| 亚洲成人激情图| 亚洲 欧美 中文字幕| 中文字幕一区二区三| 无码人妻丰满熟妇区毛片蜜桃精品 | 欧美激情影音先锋| 欧美xxx.com| 欧美日韩国产综合一区二区| www.超碰在线观看| 91女人视频在线观看| 久久撸在线视频| 国色天香一区二区| 欧洲av一区| 国产aa精品| 7777免费精品视频| 国产素人视频在线观看| 亚洲国产99精品国自产| 在线视频欧美亚洲| 亚洲成人黄色影院| 国产91在线播放九色| 成人动漫视频在线| 午夜两性免费视频| 99国产精品| 综合久久国产| 亚洲区小说区图片区qvod| 91久久精品视频| 在线午夜影院| 最新国产精品拍自在线播放| 黄色aaa毛片| 欧美精品免费视频| 亚洲 欧美 日韩 在线| 亚洲一区欧美一区| 长河落日免费高清观看| 99国产欧美另类久久久精品| 国产欧美精品一二三| 国产一区成人| 天天做天天躁天天躁| 成人精品视频| 欧日韩一区二区三区| 国产精品欧美大片| 91夜夜未满十八勿入爽爽影院 | 一区二区久久| 性生活免费观看视频| 欧美丝袜丝交足nylons172| 精品欧美日韩在线| 久久伊人影院| 国产又爽又黄的激情精品视频| 中文在线8资源库| 欧美激情a在线| 超碰在线caoporn| 日韩有码在线观看| 国产爆初菊在线观看免费视频网站| 亚洲精品国产精品国自产在线 | 国产麻豆精品| 国产精品主播视频| 中文另类视频| 国产高清在线不卡| 欧美一区久久久| 欧美一级bbbbb性bbbb喷潮片| 视频在线这里都是精品| 久久精品中文字幕一区| 日本成人在线播放| 色婷婷综合久久久久| av免费在线一区二区三区| 亚洲视频在线看| 欧美理论在线观看| 国产丝袜一区视频在线观看| 少妇精品高潮欲妇又嫩中文字幕 | 国产精品视频一区二区久久| 国产视频亚洲精品| 亚洲欧美日韩免费| 日韩成人黄色av| 你懂的免费在线观看| 亚洲欧洲xxxx| 国产黄在线播放| 中文字幕日韩欧美在线| а√天堂中文在线资源bt在线| 亚洲日本欧美中文幕| 国产一二三在线观看| 在线观看免费高清视频97| av福利在线播放| 日韩中文字幕免费视频| 成人影院在线看| 欧美高清激情视频| 成入视频在线观看| 欧美一区二区三区……| 精品视频在线一区二区在线| 国产精品久久77777| 日本在线一区二区| 亚洲伊人第一页| 97se亚洲| 欧美日韩国产一二| 久久神马影院| 中文字幕精品在线播放| 1024成人| 成人免费毛片播放| 久久国产精品无码网站| 2018国产精品| 91麻豆精品在线观看| 无码人中文字幕| 亚洲狠狠丁香婷婷综合久久久| 国产午夜精品一区二区理论影院 | 97人妻精品一区二区三区软件 | 亚洲va国产va天堂va久久| 综合伊人久久| 你懂的视频在线一区二区| 第一会所亚洲原创| 人妻激情另类乱人伦人妻| 国产美女一区| 亚洲欧美自拍另类日韩| 国产suv一区二区三区88区| 中文在线一区二区三区| 亚洲欧美一区二区视频| 日韩三级免费看| 欧美日韩国产免费| 成人免费公开视频| 国产一区二区激情| 色爱综合区网| 国产精品电影久久久久电影网| 国产精品日韩精品在线播放| 精品国产福利| 91精品一区国产高清在线gif| 国产精彩视频一区二区| 青娱乐精品视频| 国产艳妇疯狂做爰视频| 中文字幕 久热精品 视频在线| 久久久久成人片免费观看蜜芽| 欧美丝袜第一区| 国产极品久久久| 在线观看成人黄色| yellow字幕网在线| 95av在线视频| 国产一区二区三区电影在线观看 | 日韩中文字幕亚洲精品欧美| 男人的天堂亚洲| 亚洲一级Av无码毛片久久精品| 国产欧美日韩精品a在线观看| 精品午夜福利在线观看| 欧美日韩国产小视频| 你懂的视频在线播放| 国内精品400部情侣激情| 成人免费91| 亚洲日本精品国产第一区| 亚洲尤物精选| 性色av蜜臀av浪潮av老女人| 亚洲三级视频在线观看| 中文字幕福利视频| 亚洲欧美国产制服动漫| heyzo一区| 鬼打鬼之黄金道士1992林正英| 日韩在线观看一区| 国产精品亚洲a| 99re视频精品| 国产一级一片免费播放放a| 欧美一区二区视频在线观看2020 | 欧美精品激情在线| 国产精品亚洲一区二区在线观看| 亚洲va韩国va欧美va精四季| 久久成人免费| 人妻体内射精一区二区| 懂色av影视一区二区三区| 国产刺激高潮av| 欧美国产激情18| 亚洲高清在线一区| 欧美 亚洲 视频| 丁香激情综合国产| 久久网免费视频| 精品久久久久久久人人人人传媒| 成人短视频在线| 91欧美激情另类亚洲| 欧美88av| 男人的天堂免费| 亚洲自拍与偷拍| 国产成人无码www免费视频播放| 欧美精品激情视频| 老司机在线精品视频| 浮妇高潮喷白浆视频| 91网上在线视频| 久久99国产综合精品免费| 国产视频丨精品|在线观看| 亚洲一二三四| 性欧美精品一区二区三区在线播放 | 蜜桃传媒一区二区亚洲av| 欧美日韩性生活视频| 天堂在线一二区| 国产成人精品在线| 国产精品久久天天影视| 一级片黄色免费| 亚洲一线二线三线视频| 天堂在线资源网| 国产精品高潮呻吟久久av无限| 国产欧美亚洲精品a| 国产精品嫩草影院8vv8| 一区二区三区久久| 日本在线视频1区| 国产精品国产福利国产秒拍| 欧美3p视频| 白丝校花扒腿让我c| 欧美性xxxxx极品娇小| av在线第一页| 91沈先生作品| 中文国产一区| 色欲AV无码精品一区二区久久| 欧美精品欧美精品系列| av今日在线| 亚洲精品一区二区三区四区五区 | 中文字幕资源网在线观看| 国产精品免费在线| 日韩精品一区第一页| 国产美女福利视频| 亚洲精品av在线| 国产在视频一区二区三区吞精| 九九久久九九久久| 久久久亚洲国产美女国产盗摄| 国产绿帽一区二区三区| 韩国一区二区电影| 精品一级毛片| 国产精品成人免费一区久久羞羞| 色综合婷婷久久| 91在线中字| 亚洲精蜜桃久在线| 成人福利电影精品一区二区在线观看| 国产免费a视频| 久久久久久有精品国产| 日韩成人激情| 亚洲欧美日本一区| 欧美一区二区三区视频| 欧美日韩不卡| 青青草成人免费在线视频| 日韩毛片一二三区| 免费毛片在线| 国产一区二区免费在线观看|