我正在构建一个同构的React/React-Router/Redux/Webpack应用程序,尝试实现服务器端渲染。
我的目录如下:
/client
/actions
/components
/containers
/server
/server.js
在我的webpack配置中,我为所有客户端文件夹设置了别名:
var path_base = path.resolve(__dirname, '..');
const resolve = path.resolve;
const base = function() {
var args = [path_base];
args.push.apply(args, arguments);
return resolve.apply(resolve,args);
};
const resolve_alias = base.bind(null, 'src/client');
const aliases = [
'actions',
'components',
'constants',
'containers',
'middleware',
'reducers',
'routes',
'store',
'styles',
'utils',
'validation'
];
这样在被 webpack 打包的代码中,我可以这样做:
import { Widget } from 'components';
而该导入是由webpack解析的。
现在,在我的服务器代码中,为了进行渲染,我必须导入一些客户端文件,例如routes/index.js
。当我导入我的路由文件时,我遇到的问题是它使用webpack别名指向另一个文件,比如components
或containers
,因此自然情况下,node js require系统无法解析它。
我该如何解决这样的问题?我查看了这个问题,它讨论了基本上设置与webpack相同的别名,用mock-require实现。但问题在于我的路由文件导入了所有组件,然后所有组件都导入像样式表、图像等东西。那我应该使用类似于webpack-isomorphic-tools的东西吗?
我一直在查看的指南(例如此处)都很好地展示了如何实现服务器端渲染,但它们都没有讨论如何解析所有requires等内容。