如何在Webpack构build和NodeJS服务器进程之间共享代码?
我的应用程序有一个或多或less像这样的目录结构:
-
src-program/
– 包含前端代码,包括package.json
和webpack.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.js
parsing的app-module-path ,但是这个文件不是由Babel处理的,或者像transform-runtime
( foo.js
间接需要的)的其他Babel模块不能被parsing,因为它们驻留在src-server/node_modules
…
我可以通过预先编译代码来解决这个问题,而不是使用babe-register
但是不pipe怎样,这一切都感觉不对。
那么, 在Webpack构build和NodeJS服务器进程之间共享代码的好方法是什么 ?