如何在Webpack构build和NodeJS服务器进程之间共享代码?

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

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

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

对于前端,在Webpack构build期间通过使用babel-loader来完成“转译”。

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

shared/foo.js需要其他模块,这些模块位于前端和后端的package.json文件中。

由于NodeJS / Webpackparsing模块的方式,共享模块找不到正常。


对于Webpack,我使用这个configuration来解决这个问题:

 resolve: { root: __dirname, fallback: [ __dirname + "/../shared", __dirname + "/node_modules" ], extensions: ['', '.js', '.jsx'] }, 

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

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

 import * as foo from 'foo'; 

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

我尝试了使用foo.jsparsing的app-module-path ,但是这个文件不是由Babel处理的,或者像transform-runtimefoo.js 间接需要的)的其他Babel模块不能被parsing,因为它们驻留在src-server/node_modules

我可以通过预先编译代码来解决这个问题,而不是使用babe-register但是不pipe怎样,这一切都感觉不对。

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