为什么在节点后端上使用Webpack
如果我们谈论的是react和node app,那么可以构建同构的react app。而且,如果您import
在客户端的react app中使用ES6模块,也可以-它们由客户端的webpack捆绑在一起。
但是问题出在服务器上,因为您的节点不支持ES6模块。您可以require('babel/register');
在节点服务器端使用,但它会在运行时传递代码-无效。解决此问题的最常见方法是通过webpack打包后端(您不需要所有代码都可以通过webpack进行翻译-只是有问题的,例如本示例中的react东西)。
这同样与JSX。
同时捆绑前端和后端
您的webpack配置可能必须在数组中进行配置:一个用于前端,第二个用于后端:
webpack.config.js
const common = {
module: {
loaders: [ ]
},
plugins: [ ],
resolve: {
extensions: ['', '.js', '.jsx']
}
};
const frontend = {
entry: [
'frontend.js'
],
output: {
filename: 'frontend-output.js'
}
};
const backend = {
entry: [
'backend.js'
],
output: {
filename: 'backend-output.js'
},
target: 'node',
externals:
};
module.exports = [
Object.assign({} , common, frontend),
Object.assign({} , common, backend)
];
如果使用此配置启动该配置,webpack --watch
则将并行构建两个文件。当您编辑前端特定代码时,只会frontend-output.js
生成backend-output.js
。最好的部分是当您编辑同构反应部分时-Webpack会立即构建两个文件。
您可以在本教程中找到何时对节点使用webpack的说明(第4章)。