成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何打造一個令人愉悅的前端開發環境(一)

開發 開發工具
最近幾年,前端發展越來越迅速,各種萌新加入了前端這個大家庭,大有趕IOS、超Android的趨勢呀!同時,萌新們提出了各種前端工作問題,除了最基礎的html、css、js三板斧之外,最讓人頭疼的應該是關于環境的配置問題,所以以環境作為切入點,開始一系列的前端開發環境配置文章。

[[169489]]

 

文章來源

最近幾年,前端發展越來越迅速,各種萌新加入了前端這個大家庭,大有趕IOS、超Android的趨勢呀!同時,萌新們提出了各種前端工作問題,除了最基礎的html、css、js三板斧之外,最讓人頭疼的應該是關于環境的配置問題,所以以環境作為切入點,開始一系列的前端開發環境配置文章。

主要會涉及到打包、構建、編程工具、debug等等前端環境,以及前后端分離、Nodejs中間層使用伸展面。

工欲善其事必先利其器

以編程工具而言WebStorm、sublime、Atom、VS Code、Brackets等等一大推,這方面我個人是覺得無所謂,蘿卜青菜各有所愛,優缺點基本很明顯,就看個人的接受情況了,舉點例子說下吧:

  • WebStorm 很全面,無論是純前端還是Nodejs,包括git、svn、命令行、格式化工具都有,使用順手之后各種方便,而且還直接支持nodejs的debug,作為前端的全能重量級IDE非常不錯,唯一不好的就是太重,體現在內存占有,啟動時間上。
  • sublime 輕量級文本編輯器,3比較2來說有很大提升,小巧靈活是最大的特點,麻煩的是各種插件的配置,需要自己來組合,不熟悉的人用起來遠遠不想WebStorm方便,快捷。而且每次新的電腦都要配置一次,比較繁瑣。(現在有可以導出配置文件來適用新電腦的方法)
  • Atom類似sublime,比較輕量級,內核主要是Nodejs寫出來的,前端各種愛,因為比較適合前端的技術棧,但是大文件的性能問題一直受人詬病,不是很流暢,還有就是插件比起sublime來說還是少了不少,整個生態不如sublime,但是因為是github出的,還是受人青睞不少。我貢獻的一個vue格式化插件
  • VS Code 和 Brackets這兩個比較小眾,使用的很少,我用過VS,感覺還挺不錯,就是生態更差,而且很多插件的說明寫的很糟糕,讓人看不懂。各方面的資料也比較少。Brackets 一個同事使用過,提示比較好,個人感覺入門很不錯。貌似還能及時瀏覽web效果。

個人建議使用入門的時候使用sublime或者Atom就可以,配置一下自己喜歡的插件,基本就可以開始干活了,當然如果是用eclipse已經很習慣的人,我覺得WebStorm這種重型機槍,可能更適合你。不要對工具的提示產生依賴太過于嚴重,否則很多東西自己會慢慢遺忘的哦!!!

PS:如果要提升自己的逼格怎么辦?請使用VIM或者Emacs這種高逼格的編輯方法。

木牛流馬

糧草生產的快,也要有好的運輸工具才能上到前線,對于前端而言,屬于我們的運輸工具是打包構建工具。

打包構建工具經歷了各種不同的時代,從服務端主宰的打包構建,到現在前端自己主宰的構建工具,不同的需求產生了各種不同的構建工具,這些工具其實也算前端的工作能力之一,因為每一種新的工具都有優缺點,熟悉的使用也并非特別簡單的事情。

先來說說都有哪些不同的種類吧:

  • 后端為主要的整體打包工具,這個以FIS作為代表,大家或多或少都應該知道百度出的這個開源打包構建工具鏈,從整體上解決了前端工程的問題,包括優化、資源加載、模塊打包、自動化、部署一系列問題,從功能上看非常全面,FIS3的升級讓人也感覺很是不錯,不再依賴PHP和java之類的服務端語言,基于Nodejs來做,更加貼近前端社區。那么缺點是什么呢: 生態環境不夠豐富,主要插件應該還是百度自己人提供的,參與進來的社區人數不夠多。我覺得這方面的原因是fis2當時對PHP和JAVA的依賴,導致大家對fis的興趣不弄,錯過了最佳時機,這個其實跟百度自己的web的技術棧有很大關系。同時帶來的好處是,FIS可以結合PHP做整體網站的部署和構建。以上主要是看文檔的一些分析,本人并沒有用過FIS,有說錯請拍磚。這類的打包構建工具還有很多,大部分都是大公司的內部使用,例如京東、馬蜂窩之類,都是PHP為主,加上前端的整體構建工具。
  • Grunt派系,這個應該是比較早的Nodejs打包構建工具,一度很是流行,Grunt的好處是提供了一個核心的構建規范,基于文件,來使用各種Grunt的插件組合整個構建行為,當時我記得比較清楚的是我前面文章提到過的Yeoman這個構建工具,核心就是Grunt,自動生成了各種插件配置。但是這個有很大的缺點:一是構建的配置文件寫的很長很啰嗦,二是效率不是很高,原因是它構建的方式基于文件的,每次都會產生新的臨時文件,這樣無形中就會有磁盤的I/O讀寫,所以會降低整體的構建速度。
  • Gulp新體系,因為以上的Grunt的缺點,Gulp應運而生,借鑒了Unix的管道概念,用Nodejs的stream特性,來組織整個構建鏈條,在官方的核心只提供幾個方法,大家基于官方API來編寫自己需要的處理插件,再組合起來,完成構建功能。和Grunt的基本理念很像,但是很多又有區分,例如:配置和運行分離,插件單一職責,規定大于配置等等。關于這兩個的比較有很多,大家可以搜搜Grunt Gulp 就知道了。不多說
  • 新的王者Webpack,個人感覺應該是15年上半年到16年初,Webpack橫空出世,大有一舉統一整個前端構建生態的趨勢,貌似現在FE們不會點Webpack相關的,都不好意思說自己是前端了。最初Webpack應該只是和requirejs、browserify之類模塊化工具比對,但是其靈活的API和豐富的loader,致使它可以連帶完成Gulp之類的構建事件,目前其生態環境巨好,各種插件層出不窮,比較火的React,vuejs等都有相關的針對性loader來優化構建方式,可以說是目前最流行的工具。不過缺點也特別的明顯,就是難懂,主要是過于靈活,各種方式都能接受,導致沒有一個統一的標準,配置起來特別難受,在群里,一般對于Webpack的配置問題的是最多的。很多新手對于Webpack的各種配置錯誤,感覺都欲哭無淚,想死的心都有了。相關的文章也很多,推薦題葉的入門指南。
  • 逼格提升的NPM構建方式。這個阮一峰對于前端構建的變化吐槽過,說新的構建工具就是ES6的構建工具。推薦看賀師俊的答案如何評價阮一峰關于前端工具變化快的言論?

就我個人而言,目前主要還是使用的Webpack來構建,當然一些比較老的系統代碼,由于歷史原因,還是使用的Gulp來構建,也有正在切換之中的,Gulp+Webpack。比較豐富多彩(其實有點混亂)。

三只松鼠--干貨

  1. var gulp = require('gulp'); 
  2.  
  3. var less = require('gulp-less'); 
  4.  
  5. var plugins = require('gulp-load-plugins')(); 
  6.  
  7. var pngquant = require('imagemin-pngquant'); 
  8.  
  9. gulp.task('default'function(){ 
  10.  
  11. gulp.src('less/zhanzhao.less').pipe(less()).pipe(gulp.dest('css/')); 
  12.  
  13. gulp.src('less/liuqian.less').pipe(less()).pipe(gulp.dest('css/')); 
  14.  
  15. gulp.src('less/student.less').pipe(less()).pipe(gulp.dest('css/')); 
  16.  
  17. return gulp.src('less/company.less').pipe(less()).pipe(gulp.dest('css/')); 
  18.  
  19. }); 
  20.  
  21. gulp.task('clean',function(){ 
  22.  
  23. return gulp.src('publish/').pipe(plugins.clean()); 
  24.  
  25. }); 
  26.  
  27. gulp.task('bulid', ['clean'],function(){ 
  28.  
  29. gulp.src('favicon.ico').pipe(gulp.dest('publish/')); 
  30.  
  31. gulp.src('download/**/*').pipe(gulp.dest('publish/download/')); 
  32.  
  33. gulp.src('mail/**/*').pipe(gulp.dest('publish/mail/')); 
  34.  
  35. gulp.src('statement/**/*').pipe(gulp.dest('publish/statement/')); 
  36.  
  37. gulp.src('template/**/*').pipe(gulp.dest('publish/template/')); 
  38.  
  39. gulp.src('css/**/*.css').pipe(plugins.minifyCss()).pipe(gulp.dest('publish/css/')); 
  40.  
  41. gulp.src('scripts/**/*.js').pipe(plugins.uglify()).pipe(gulp.dest('publish/scripts/')); 
  42.  
  43. return gulp.src('images/**/*').pipe(plugins.cache(plugins.imagemin({ 
  44.  
  45. optimizationLevel: 5, 
  46.  
  47. progressive: true
  48.  
  49. svgoPlugins: [{removeViewBox: false}], 
  50.  
  51. use: [pngquant()] 
  52.  
  53. }))).pipe(gulp.dest('publish/images/')); 
  54.  
  55. }); 
  56.  
  57. gulp.task("revision",['bulid'],function(){ 
  58.  
  59. gulp.src(['template/head-js.html''template/baidu.html']).pipe(plugins.concat('head-js.html')).pipe(gulp.dest('publish/template/')); 
  60.  
  61. return gulp.src(['publish/css/*.css','publish/scripts/config.js','publish/images/**/*'],{base: 'publish'}) 
  62.  
  63. .pipe(plugins.rev()) 
  64.  
  65. .pipe(gulp.dest('publish/')) 
  66.  
  67. .pipe(plugins.rev.manifest({ 
  68.  
  69. merge: true 
  70.  
  71. })) 
  72.  
  73. .pipe(gulp.dest('publish/')); 
  74.  
  75. }); 
  76.  
  77. gulp.task("publish", ["revision"],function(){ 
  78.  
  79. var manifestCss = gulp.src("publish/rev-manifest.json"), 
  80.  
  81. manifestDownload = gulp.src("publish/rev-manifest.json"), 
  82.  
  83. manifest = gulp.src("publish/rev-manifest.json"); 
  84.  
  85. gulp.src('publish/css/*.css'
  86.  
  87. .pipe(plugins.revReplace({manifest: manifest})) 
  88.  
  89. .pipe(gulp.dest('publish/css/')); 
  90.  
  91. gulp.src('*.html'
  92.  
  93. .pipe(plugins.revReplace({manifest: manifestCss})) 
  94.  
  95. .pipe(gulp.dest('publish/')); 
  96.  
  97. gulp.src('publish/download/*.html'
  98.  
  99. .pipe(plugins.revReplace({manifest: manifestDownload})) 
  100.  
  101. .pipe(gulp.dest('publish/download/')); 
  102.  
  103. }); 

上面是我曾經自己配置的一個打包構建gulpfile,里面做了上述我提到的所有事情,除了js模塊化打包之外,這個大家可以自己研究下,比較簡單。我來解釋下各個任務的作用。

  • default, 主要是監聽less變化生成css。
  • clean, 清除掉publish文件夾的內容
  • bulid,把源碼移動到publish文件夾下面,對于一些類型的文件做處理,例如css的壓縮,js的壓縮,圖片的壓縮緩存等等。
  • revision,md5文件,根據html,css的引用來給相關的文件添加md5戳,生成新的md5戳文件,來保持文件更新。
  • publish,根據上面 revision生成的新的md5文件來做一次文件替換,替換里面js,css,image的引用路徑。

其實有些地方可以優化的,這個大家有時間可以自己去試試。

以上就是這個系列的第一篇文章,歡迎吐槽和討論各種問題,第二篇文章會以Webpack為主,來解釋它的配置方案。

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2016-08-11 17:09:14

Javascripthtml前端

2016-11-07 21:15:12

前后端分離expressJavascript

2016-11-07 21:24:08

HtmlNode.jsJavascript

2023-12-27 14:19:33

Python內置函數開發

2012-03-28 09:40:40

JavaScript

2021-02-04 10:22:32

前端開發技術

2018-07-20 14:30:15

2023-02-13 00:18:22

前端庫框架集合

2020-11-10 07:11:23

Linux內核補丁

2017-11-07 22:25:17

網站評測工具YSlow

2024-04-01 11:52:46

2019-09-03 11:32:36

PythonLinux操作系統

2017-06-22 10:44:55

Linux調試器準備環境

2020-02-25 22:00:22

機器人人工智能系統

2018-01-10 12:09:12

Android開發程序員

2015-03-10 11:21:44

JavaScript組JavaScript

2020-06-18 10:03:13

在家工作疫情統一通信

2021-01-26 10:33:45

前端開發技術

2013-07-05 14:45:05

AndroidOpenGL ES開發

2020-05-19 10:45:31

沙箱前端原生對象
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 我要看黄色录像一级片 | 国产精品永久免费 | 五月天天色| a级片播放 | 可以在线观看av的网站 | 午夜丁香视频在线观看 | 欧美精品二区 | www国产亚洲精品久久网站 | 国产日产久久高清欧美一区 | 欧美一区二区三区视频 | 天天操天天玩 | 久久精品视频免费看 | 亚洲va国产日韩欧美精品色婷婷 | 91视视频在线观看入口直接观看 | 久久久久久久国产精品 | 第一区在线观看免费国语入口 | 国产精品69毛片高清亚洲 | 欧美jizzhd精品欧美巨大免费 | 国产午夜精品视频 | 日韩精品一区二区三区高清免费 | 国产精品一区三区 | 91天堂网| 亚洲免费人成在线视频观看 | 在线91| 欧美成人一区二免费视频软件 | 亚洲最大av网站 | 网站黄色在线免费观看 | 国产精品视频久久久 | 久久在线视频 | 亚洲国产精品久久久 | 欧美成人精品一区二区男人看 | 国产精品色 | 天天操夜夜骑 | 国产精品毛片久久久久久 | 国产一二三区电影 | www九色 | 欧洲一区二区在线 | 国产一区二区在线免费 | 三a毛片 | 中文字幕爱爱视频 | 最新日韩在线视频 |