2017-04-19 65 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", 

生产无观看,虽然,没有不,不是我,不敏感 - 可以出错的事物越少越好。