【问题标题】:how to share code between Webpack build and NodeJS server process?如何在 Webpack 构建和 NodeJS 服务器进程之间共享代码?
【发布时间】:2017-02-06 15:16:57
【问题描述】:

我的应用程序有一个或多或少这样的目录结构:

  • src-program/ - 包含前端代码,包括 package.jsonwebpack.config.js
  • src-server/ - 包含后端代码,包括不同的 package.json.babelrc
  • shared/foo.js - 是前端和后端都需要的 JavaScript 代码

所有代码都使用 ES2015 语法,因此使用 Babel 进行转译。

对于前端,“转译”是在 Webpack 构建期间使用 babel-loader 完成的。

对于后端,它由 babel-register 即时完成。

shared/foo.js 需要在前端和后端的package.json 文件中找到的其他模块。

由于 NodeJS/Webpack 解析模块的方式,无法正常找到共享模块。


对于 Webpack,我使用这种配置以一种有点 hacky 的方式解决了这个问题:

resolve: {
  root: __dirname,
  fallback: [
    __dirname + "/../shared",
    __dirname + "/node_modules"

  ],
  extensions: ['', '.js', '.jsx']
},

第一个fallback 确保“共享”模块已解析,第二个fallback 确保共享模块所需的模块仍解析到前端node_modules 目录。

这允许像这样简单地包含共享模块:

import * as foo from 'foo';

但是,我很难让 后端(即 NodeJS)以相同的方式解析共享模块。

我尝试使用 app-module-path,这使得 foo.js 解析,但是该文件要么没有被 Babel 处理,要么没有被其他 Babel 模块处理,例如 transform-runtime间接需要 foo.js)无法解决,因为它们位于 src-server/node_modules...

我可能可以通过预编译代码而不是使用babe-register 来解决这个问题,但无论如何感觉都不对。

那么,在 Webpack 构建和 NodeJS 服务器进程之间共享代码的好方法是什么

【问题讨论】:

    标签: node.js webpack babeljs


    【解决方案1】:

    您能否将共享模块打包为 npm 包(即使是仅驻留在文件系统上的包)?然后您的src-programsrc-server 项目可以将其作为依赖项添加到它们的package.json 中,它会被复制到各自的node_modules 文件夹中。

    见:how to specify local modules as npm package dependencies

    【讨论】:

      猜你喜欢
      • 2014-09-24
      • 2016-03-28
      • 2016-11-05
      • 2020-03-15
      • 2017-09-19
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多