以前都是介紹一些基礎知識,在這一節,咱們就要開始實戰coding了。正所謂磨刀不誤砍柴工,準備工做顯得尤其重要。不少demo只是追求效果的實現,並不注重整個demo的架構性。從我我的的角度看來,既然是demo,就應該是有參考價值的,而做爲web的demo,就更加應該凸顯整個demo的結構,因此這一節着重講解我的喜歡的node項目的先後端架構。
另,本教程乃系列教程,如需從頭看起,可先看前面兩篇博客:
http://www.cnblogs.com/yuanzm/p/4179766.html
http://www.cnblogs.com/yuanzm/p/4205891.html
源代碼地址是:https://github.com/yuanzm/Node-Chat-Demojavascript
和大多實戰demo同樣,咱們的後端會採用Node的官方推薦框架Express。根據Express官網的定義:Express 是一個簡潔而靈活的 node.js Web應用框架, 提供一系列強大特性幫助你建立各類Web應用。之因此選擇框架而不是採用原生開發,主要有兩個緣由。其一,框架幫助咱們抽象出了不少功能,能幫助咱們快速搭建Web應用;其二,用Express新建的項目,自己具備很是優秀的MVC架構,可以讓咱們更加良好的管理咱們的項目。css
npm install -g express
便可,其中-g
表明全局安裝。這個命令默認安裝的就是最新版本的Express。爲了驗證Express是否安裝成功,一般在命令行輸入express -V
查看版原本確認。npm install -g express-generator
v 4.11.2
。express project-name
便可。須要注意的是,在新建Express項目的時候,須要指定前端模板引擎。根據百度百科的定義,模板引擎(這裏特指用於Web開發的模板引擎)是爲了使用戶界面與業務數據(內容)分離而產生的,它能夠生成特定格式的文檔,用於網站的模板引擎就會生成一個標準的HTML文檔。Express默認採用的模板是jade模板,咱們的demo也將採用這這個模板,因此不須要手動指定。本實戰教程中,咱們新建一個名爲Node-Chat-Demo
的項目。在命令行先輸入express Node-Chat-Demo
,而後按照提示輸入cd Node-Chat-Demo && npm install
就完成了後端基礎環境的搭建。下面是這一步以後的文件目錄截圖(其中LICENSE之後的爲Git管理須要的文件,可忽略):bin
是express自己配置的啓動文件,咱們將不採用,可忽略node_modules
是後端使用的node插件public
防止了前端文件routes
是express的路由模塊view
是express的模板引擎放置的地方app.js
是express項目的配置文件,也能夠算是項目入口文件package.json
聲明聲明項目中使用的模塊npm start
,可是博主嘗試以後發現這個並不能監聽文件變化,也就是在文件更改的時候須要從新啓動項目,這在調試的時候就會顯得很是麻煩。針對這種狀況,咱們將採用一個叫作supervisor
的npm包,npm包的主頁是supervisor。安裝也很簡單,只須要在命令行輸入npm install supervisor -g
全局安裝便可。而後咱們在app.js的33行後面加入兩行:app.listen(3000); console.log("Listening on port 3000")
。supervisor app.js
就可以在監聽文件變化模式下啓動咱們的項目了。前端給不少開發者的印象就是一堆HTML和CSS和Javascript,雜亂無章和沒有難度。其實否則,正由於Web前端開發零散化的特性,使得前端架構尤其重要。什麼叫零散化特性呢,這是和後臺開和安卓開發等對比而來的。在安卓開發中,有強大的Eclipse,新建一個項目,整個架構徹底給你搭建好了,不用本身操心。對於傳統的後臺開發,常常採用各類MVC框架好比咱們剛剛採用的Express,一行命令一樣把結構什麼的全給你弄好了。可是前端就徹底不同了,由於他只是整個項目的一個組成部分,一般沒有特定的結構,常常是一堆css和js在須要的時候出現,顯得尤其零散。固然正是由於這種特性才讓前端開發顯得更加靈活和有意思,在這個實戰教程中,將採用本人本身總結的一套自動化工做流,力求維持項目的有序性。這個自動化工做流主要採用了browserify、Sass、Grunt,下面逐一介紹。html
.sass-cache
是Sass在預處理的過程當中產生的緩存文件,可忽略node_modules
是前端使用的node插件,在寫好Gruntfile.js文件以後在public文件夾根目錄在命令行運行npm install
會自動成成asserts
是靜態資源如圖片存放的地方,裏面包含一個文件夾images
,存放了所用到的圖片bin
是Grunt處理以後的文件,包括兩個文件夾,分別是js
和css
,包含了最終生成的main.js和main.css文件,在運行Grunt的時候會自動生成這兩個文件夾,新建bin便可lib
是前端使用到的類庫存放的地方,包括jquery和bootstrap等,暫時先新建空的lib文件夾,後續使用到了某個類庫添加便可src
顧名思義是源代碼存放的地方,咱們在開發過程當中編寫的js和scss文件都存放在這裏,包括兩個文件夾,分別是js
和scss
,分別包含了開發過程當中的js和scss文件Gruntfile.js
是Grunt的配置文件,複製下面貼出的Gruntfile.js便可。package.json
用來聲明聲明項目中使用的模塊,複製下面貼出的package.json便可。(function() { module.exports = function(grunt) { var remapify = require('remapify'); grunt.initConfig({ //每次運行Grunt的時候清除以前生成的文件 clean: { bin: ["bin"], sassCache: '.sass-cache' }, //分析模塊依賴樹,最後生成一個main.js文件 browserify: { dev: { expand: true, flatten: true, src: ["src/js/main.js"], dest: "bin/js", ext: ".js" } }, //壓縮js文件 uglify: { build: { files: [ { expand: true, cwd: 'bin/js', src: '**/*.js', dest: 'dist/js' } ] } }, //壓縮css文件 cssmin: { build: { files: { "dist/css/main.css": ["bin/css/main.css"] } } }, //監聽文件變化,若是src文件夾中的js或css文件變化了,執行任務`browserify`和`sass` watch: { compile: { files: ["src/**/*.js", "src/**/*.scss"], tasks: ["browserify","sass"] } }, //scss文件編譯成css sass: { dist: { files: { "bin/css/main.css": "src/scss/main.scss" } } } }); //加載上述任務所須要的插件 grunt.loadNpmTasks("grunt-contrib-clean"); grunt.loadNpmTasks("grunt-browserify"); grunt.loadNpmTasks("grunt-contrib-watch"); grunt.loadNpmTasks("grunt-contrib-sass"); grunt.loadNpmTasks("grunt-contrib-uglify"); grunt.loadNpmTasks("grunt-contrib-cssmin"); grunt.loadNpmTasks("grunt-contrib-copy"); //定義被執行的任務列表 grunt.registerTask("default", function() { return grunt.task.run(["clean:bin","browserify", "sass", "watch"]); }); return grunt.registerTask("build", function() { return grunt.task.run(["clean:bin", "clean:dist", "browserify", "sass", "clean:sassCache", "cssmin", "uglify", "copy"]); }); }; }).call(this);
2) package.json前端
{ "name": "Node-Chat-Demo", "version": "0.0.1", "author": "yuanzm", "license": "MIT", "devDependencies": { "grunt": "*", "grunt-browserify": "*", "grunt-contrib-clean": "*", "grunt-contrib-cssmin": "*", "grunt-contrib-uglify": "*", "grunt-contrib-watch": "*", "grunt-contrib-sass": "*" }, "dependencies": { "browserify": "^8.1.3" } }
簡單描述一下這個工做流:在寫前端代碼的時候,爲了充分利用好CSS,採用了Sass來彌補CSS自己的缺陷;爲了落實模塊化的編程思想,採用了browserify來使Javascript編寫更加高效規範;爲了可以最大化省去人工操做,採用Grunt來自動執行編譯任務;爲了升項目性能,最終生成的文件只有一個且通過高度壓縮。
綜上所述,在配置本實戰教程須要的前端環境的時候,咱們須要作如下幾件事情:
(1). 按照public文件目錄截圖以及描述創建好須要的文件目錄
(2). 確保Gruntfile.js正確的狀況下在public根目錄執行命令npm install
(3). 在public根目錄執行命令grunt
,若是沒有報錯,而且bin文件夾裏面生成了相應的main.js和main.css,說明環境配置成功。
其中,運行grunt命令的效果圖以下:
產生壓縮文件的命令和效果以下:
到這裏前端環境也配置好了。java