2016-12-25 192 views
3

我正在從Apollo測試GraphQL Server以及如何將nodemon集成到它。下面是示例文件結構:使用nodemon命令運行npm腳本

build/ 
src/ 
server.js 

這裏我NPM腳本看起來像這樣

"scripts": { 
    "start": "babel --presets es2015,stage-2 server.js -d build/ && node build/server.js", 
    "dev": "nodemon server.js" // Sample code here 
} 

什麼npm run start會做的是使用通天ES6代碼轉換成build/server.js並執行它。這將正確啓動服務器。

我想要的是觀察server.jssrc/中的更改,並在發生更改時重新啓動服務器。如果發生任何更改,我希望執行npm run start命令。根據我的需要,什麼是正確的'nodemon'命令?它更好,如果我可以使用npm run dev like命令來開始使用nodemon進行開發。

回答

0

您可以使用gulpjs觀察特定文件夾中的任何更改,然後命令它執行某些操作。 有了您的示例,您還想將代碼轉換爲es6。所以它也需要gulp-bable。如果你願意,你可以包括babel-preset-stage-2。所以,你可以簡單地把下面的代碼在gulpfile.js

gulp.task('build-es2015',() => { 
    return gulp.src('server.js') 
     .pipe(babel({ 
      presets: ['es2015'] 
     })) 
     .pipe(gulp.dest('build')); 
}); 
gulp.task('watch',() => { 
    gulp.watch(['./app/*.js'], ['build-es2015']) 
}) 

基本上,任務「手錶」將繼續關注特定文件。當他們被保存時,它將執行「build-es2015」任務轉換爲es6。

然後nodemon,它需要gulp-nodemon,那麼你可以在gulpfile.js

gulp.task('server',() => { 
    nodemon({ 
    script: 'build/server.js', 
    ext: 'js', 
    ignore: [ 
     'server.js', 
     'node_modules/**', 
     'test/**', 
     'build/**' 
    ] 
    }) 
    .on('restart',() => { console.log(`Server restarted!`) }) 
}) 

以上將繼續關注編譯/ server.js'呢。無論什麼時候改變,nodemon都會自動重啓服務器。

而對於gulpfile.js

gulp.task('dev', ['server', 'watch']) 

最後一塊包括需要一飲而盡命令要執行的任務。

$ gulp dev 

或NPM命令

"scripts": { 
    "start": "gulp dev" 
} 

這樣你就可以npm run start爲好。

不要忘記,要求在gulpfile.js所有包

const gulp  = require('gulp') 
const babel  = require('gulp-babel') 
const nodemon = require('gulp-nodemon')