5

目标:我正在尝试在nodejswebpack中设置一个项目,以便 require 函数可以使用项目目录作为根目录,因此我可以在两种环境中使用相对于项目根目录的绝对路径(同构使用,即 React 服务器+客户端渲染)。

情况:在 webpack 中,您可以设置 config.resolve.root 以使其工作,但在 nodejs 中,最好不要覆盖/修改 global.require。

命题 1:我可以创建一个新的全局函数

global.p_require

所以它在节点中工作;但是,我找不到让 webpack 将“p_require”解析为__webpack_require__而不更改 webpack 源代码的方法。

命题 2:我可以创建一个新的全局变量

global.ROOT_DIR = process.cwd()

所以它在节点中工作

require(ROOT_DIR + <relative path to root>);

但是,webpack 会将此识别为动态 require。有没有办法让 webpack 解析 ROOT_DIR?我已经尝试过Define Plugin,但它似乎在 webpack 解析 require 后加载。

问题

任何人都有解决方案或面临同样的问题?

4

1 回答 1

1

我通过让 webpack 做更多事情来解决这个问题;而不是“节点和 webpack”,它是“webpack:客户端和服务器”。我让 webpack 为客户端和服务器构建一个构建(后者在配置中使用“节点”作为其目标属性)。自定义 webpack 使用的目录很容易,所以你让它完成它的工作并为 node.js 创建一个构建。

在服务器上渲染时,您只需要编译的服务器构建。如果您需要将一些东西从服务器传递到 webpack 构建的应用程序,请将其连接到您用于服务器构建的入口点 - webpack 会将其构建为 commonJs 模块,因此您的入口点可以导出任何内容是服务端需要渲染时最方便的界面。

于 2016-01-29T19:24:08.247 回答