2017-04-19 79 views
2

我想知道是否有一種方法來配置webpack與babel和nodemon。我幾乎在網上搜索,但沒有發現任何有用的東西,或者可能是我,因爲我是非常新的構建工具。 我有這個劇本在我package.jsonbabel,帶有nodemon腳本的webpack?

"start": "nodemon app.js --exec babel-node" 

它transpile我的代碼,同時也時有變化重新啓動服務器。我想知道是否有這樣的手錶功能的webpack的配置。我可以用webpack嗎(運行服務器並觀察變化並重新啓動babel transpile)?

+0

您通常不會將Webpack用於服務器部件,它更有針對性地捆綁客戶端資源,如瀏覽器JS,CSS,圖像等。有什麼特別的原因可以說明您希望爲服務器使用Webpack ? – damd

+1

對服務器使用webpack有很好的理由,例如,如果你在服務器端編譯React組件 –

+0

@PatrickHund:你說得對,但是因爲OP是新的工具,所以我只是想讓當然,他們知道他們爲什麼使用它:) – damd

回答

2

您不必使用nodemon,您可以使用webpack's watch feature

下面是一個示例腳本,讓我們把它backend-dev.js

const path = require('path'); 
const webpack = require('webpack'); 
const spawn = require('child_process').spawn; 

const compiler = webpack({ 
    // add your webpack configuration here 
}); 
const watchConfig = { 
    // compiler watch configuration 
    // see https://webpack.js.org/configuration/watch/ 
    aggregateTimeout: 300, 
    poll: 1000 
}; 

let serverControl; 

compiler.watch(watchConfig, (err, stats) => { 
    if (err) { 
     console.error(err.stack || err); 
     if (err.details) { 
      console.error(err.details); 
     } 
     return; 
    } 

    const info = stats.toJson(); 

    if (stats.hasErrors()) { 
     info.errors.forEach(message => console.log(message)); 
     return; 
    } 

    if (stats.hasWarnings()) { 
     info.warnings.forEach(message => console.log(message)); 
    } 

    if (serverControl) { 
     serverControl.kill(); 
    } 

    // change app.js to the relative path to the bundle created by webpack, if necessary 
    serverControl = spawn('node', [path.resolve(__dirname, 'app.js')]); 

    serverControl.stdout.on('data', data => console.log(data.toString())); 
    serverControl.stderr.on('data', data => console.error(data.toString())); 
}); 

當您在您的服務器代碼的更改,您就可以開始在命令行上此腳本

node backend-dev.js 

,的WebPack將重新編譯並重新啓動服務器。

+0

是否有可能在webpack中執行任何類型的配置,以便它監視我的開發文件以進行更改,並且在發生更改時它會更新軟件包文件並運行捆綁文件? –

+0

這正是我的代碼所做的,您可以在其中放置任何webpack配置,其中註釋說。 –

+0

但是哪一部分是在這裏執行包文件的地方? –

1

至於巴貝爾部分,我相信babel loader你有覆蓋。我用這個在我webpack.config.js(2的WebPack):

module: { 
    ... 
    rules: [ 
    { 
     test: /\.js$/, 
     exclude: /node_modules/, 
     loader: 'babel-loader', 
     query: {presets: ['es2015']} 
    } 
    ] 
} 

但我不使用nodemon,所以對不起,只是一半的答案。我在開發中使用webpack-dev-server。和PM2在分期/生產,我使用它,而舉辦這樣我就不必手動重新啓動事情的手錶,並且它更容易配置比webpacks DITO:

// pm2's ecosystem.json (just to be thorough): 
"watch"  : "./", 
"ignore_watch" : "node_modules", 

生產無觀看,雖然,沒有不,不是我,不敏感 - 可以出錯的事物越少越好。