为什么在 node 后端使用webpack
如果我们说的是react和node应用程序,你可以构建isomorphic react app个.如果你在客户端的react应用程序中使用101个ES6模块,也没关系——它们通过客户端的webpackBundle 在一起.
但当您使用node doesn't support ES6 Modules年以来的相同react模块时,问题就出现在服务器上.您可以在 node 服务器端使用require('babel/register');
,但它会在运行时传输代码,这是无效的.解决这个问题最常见的方法是按网页包打包后端(你不需要所有代码都通过网页包进行传输——只需要有问题,比如本例中的react内容).
JSX也一样.
同时Bundle 前端和后端
您的网页包配置必须在数组中进行配置:一个用于前端,另一个用于后端:
webpack.config.js
const common = {
module: {
loaders: [ /* common loaders */ ]
},
plugins: [ /* common plugins */ ],
resolve: {
extensions: ['', '.js', '.jsx'] // common extensions
}
// other plugins, postcss config etc. common for frontend and backend
};
const frontend = {
entry: [
'frontend.js'
],
output: {
filename: 'frontend-output.js'
}
// other loaders, plugins etc. specific for frontend
};
const backend = {
entry: [
'backend.js'
],
output: {
filename: 'backend-output.js'
},
target: 'node',
externals: // specify for example node_modules to be not bundled
// other loaders, plugins etc. specific for backend
};
module.exports = [
Object.assign({} , common, frontend),
Object.assign({} , common, backend)
];
如果你以webpack --watch
开始这个配置,它将并行构建你的两个文件.编辑前端特定代码时,只会生成frontend-output.js
,backend-output.js
也是如此.最好的部分是当你编辑同构的react 部分-网页将同时生成两个文件.
你可以在这tutorial条说明中找到何时为node使用webpack(在第4章).