Nodemon和Grunt-Contrib-Watch: 有什麼不同?

在過去一個月,我一直使用Nodemongrunt-contrib-watch。這些都是很好的工具,我認爲任何人使用NodeJS至少應該有這些在你的“我熟悉”類別(“I’m familiar with” )。但是因爲我最近一直在使用這些工具,我一直問自己“爲什麼我使用這兩個?爲什麼不堅持其中之一呢?“…和我坐在這裏,思考我目前做的項目,想知道如果我可以切換到其中一個的一切,發現Nodemongrunt-contrib-watch的區別。

Nodemon

Nodemon的核心是一個命令行工具,它取代了標準的node命令行,目標是隻要一個文件發生變化就重新啓動node應用程序。在大多數情況下,你只是在命令行上將node替換爲nodemon
這裏寫圖片描述

Nodemon會開啓一個正常的node進程並監視文件系統的變化。當nodemon監測到文件已經改變,nodemon將停止並重新啓動node進程。這對搭建一個長時間運行的node app程序特別有用,像ExpressJS web應用程序一樣,替代一直需要手動停止並重新啓動服務器的操作,你就讓nodemon幫你吧。

Nodemon讓生活簡單,文件發生變化的時候會重啓你的node 進程。

Grunt-Contrib-Watch

這也是監測文件系統的變化的一個工具。但其並不是在文件系統發生變化的時候重新啓動程序,它可以讓你做許多其他的事情包括運行各種Grunt Tasks

在這個配置中,我監測 public/javascripts文件夾中JavaScript 文件的變化,然後運行jshint browserify任務。與grunt-contrib-watch還有其他事情可以做,但它的核心,也是它最好的,就是監測到文件變化的時候可以執行Grunt Tasks。

So, What’s The Difference?

真正的區別——Nodemon是旨在重啓node process,而grunt-contrib-watch是運行一組特定的grunt tasks。是的,它們二者都是監測文件系統的變化並做一些作爲迴應,但作爲迴應,它們所做的就是二者真正的區別。我的應用程序同時使用nodemongrunt-contrib-watch因爲他們提供兩個不同的目的。當我改變ExpressJS app.js文件或我的一個路由處理程序,nodemon 會爲我介入和重新啓動應用程序。當我在相同的ExpressJS 應用程序的 public/ javascripts文件夾下修改JavaScript文件的時候,grunt-contrib-watch 介入並運行相關代碼下我的所有任務。我對grunt-contrib-watch做更多的不僅僅是這一點,但我想,這很好地說明了它們的差異

Should I Use Both?

最後,我意識到這些工具非常相輔相成的。他們攜手並進,創造一個史詩般的NodeJS應用程序開發環境。所以,同時使用,因爲他們有不同的用途。

最後給出自己練習的一個gruntfile.js配置文件代碼

        module.exports=function(grunt){
    grunt.initConfig({
        watch:{
            jade:{
                files:['views/**'],
                option:{
                    livereload:true
                }
            },
            js:{
                files:['public/js/**','models/**/*.js','schemas/**/*.js'],
                // tasks:['jshint'],
                options:{
                    livereload:true
                }
            }
        },
        nodemon:{
            dev:{
                options:{
                    file:'app.js',
                    args:[],
                    ignoredFiles:['README.md','node_modules/**','.DS_Store'],
                    watchedExtensions:['js'],
                    watchedFolders:['app','config'],
                    debug:true,
                    delayTime:1,
                    env:{
                        PORT:3000
                    },
                    cwd:__dirname
                }
            }
        },
        concurrent:{
            tasks:['nodemon','watch'],
            options:{
                logConcurrentOutput:true
            }
        }
    })

    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-nodemon');//文件改變後,會自動啓動服務 
    grunt.loadNpmTasks('grunt-concurrent');// Run grunt tasks concurrently 併發執行任務

    grunt.option('force',true);//避免編譯的時候出現錯誤而中斷服務
    grunt.registerTask('default',['concurrent']);//註冊default任務

    }

水平有限,意思大概翻譯,原文請看:
Nodemon vs Grunt-Contrib-Watch: What’s The Difference?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章