我只是想知道,我开始为一个新项目使用Webpack,到目前为止,它运行良好.我几乎会说,比起我以前用过的咕噜,我更喜欢它.但现在我很困惑,我该如何和/或应该如何将它用于我的Express后端?

看,我正在创建一个带有前端(ReactJS)和后端(ExpressJS)的应用程序.该应用程序将在Heroku上发布.现在,我似乎也应该使用带有ExpressJS的Webpack,用一个命令(前端和后端)启动并运行应用程序.

但是写这篇blogpost http://jlongster.com/Backend-Apps-with-Webpack--Part-I的家伙似乎使用Webpack将所有后端js文件Bundle 在一起,在我看来这真的没有必要.我为什么要打包我的后端文件?我想我只是想运行后端,观察后端文件的变化,并将Webpack的其余功能仅用于前端.

你们如何Bundle 前端,同时运行后端nodejs部分?或者有什么好的理由将后端文件与WebpackBundle 在一起?

推荐答案

为什么在 node 后端使用webpack

如果我们说的是reactnode应用程序,你可以构建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.jsbackend-output.js也是如此.最好的部分是当你编辑同构的react 部分-网页将同时生成两个文件.

你可以在这tutorial条说明中找到何时为node使用webpack(在第4章).

Node.js相关问答推荐

容器端口是容器内 node 应用程序的端口吗?

Jest由于UUID而无法解析测试,即使在Jest中启用ESModule支持后也是如此

当FastifyJS向客户端发送响应时,apache 不会将其发送给他

带有apache Couch-db和Nano的推荐引擎:过滤特定用户的视图

车把模板引擎循环问题

PEAN auth 应用程序:为什么 Angular 拦截器总是使用BehaviorSubject 返回 null(即初始值),而不是更新后的值?

Google App Engine 突然不允许我部署我的 node.js 应用程序

具有项目外部子路径导入的 Firebase 函数

级联定时器和Jest 的异步功能

Mongodb 从文档中获取聚合结果中的特定属性

postman 发送请求……永远

带有 node.js 和 express 的基本网络服务器,用于提供 html 文件和assets资源

如何在 node 调试器中禁用第一行中断

TypeError:winston.Logger 不是带有winston 和morgan 的构造函数

安装 node.JS 时,node.js 运行时和 npm 包管理器选项有什么区别?

Selenium WebDriver 等到元素显示

安装Node.js 安装n 安装Node.js?

node.js 在控制台上显示未定义

如何从 find 方法返回 Mongoose 结果?

如何在 NodeJS 中拆分和修改字符串?