Webpack和Nodejs的同构绝对路径require

5
**目标**: 我正在尝试在 `nodejs` 和 `webpack` 中设置一个项目,使得 `require` 函数可以使用项目目录作为根目录,在两个环境中(即同构使用,例如 React 服务器和客户端渲染)都可以使用绝对路径相对于项目根目录进行引用。
**情况**: 在 `webpack` 中,您可以设置 `config.resolve.root` 来使其工作,但在 `nodejs` 中,最好不要覆盖/修改全局的 `require`。
**建议1**: 我可以创建一个新的全局函数。
global.p_require

因此它在节点中有效;然而,我未能找到一种方法让webpack将“p_require”解析为__webpack_require__,而不更改webpack源代码。

提案2:我可以创建一个新的全局变量

global.ROOT_DIR = process.cwd()

所以它可以在Node中工作,方法是

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

然而,webpack会将此视为动态require。是否有一种方法使webpack解析ROOT_DIR?我已经尝试过Define Plugin,但它似乎在webpack解析require之后加载。

问题

有人有解决方案或遇到相同的问题吗?


你尝试过在运行webpack和服务器之前设置NODE_PATH吗? NODE_PATH=<root_of-Project> webpackNODE_PATH=<root_of-Project> node server.js - rockingskier
我已经尝试过这个。但问题是在这里发生了什么 https://gist.github.com/branneman/8048520 (并不总是最好的解决方法) - user2255895
你好,这里也遇到了同样的问题。你找到解决方案了吗? - egig
1个回答

1
我通过让webpack做更多的工作来解决这个问题; 不再是“node和webpack”,而是“webpack:客户端和服务器”。我让webpack为客户端和服务器分别进行构建(后者在配置中使用“node”作为其目标属性)。很容易自定义webpack用于require的目录,因此您可以让它完成其工作并为node创建一个构建。在服务器上呈现时,只需要求编译后的服务器构建即可。如果您需要从服务器传递一些内容到webpack构建的应用程序中,请在用于服务器构建的入口点中进行连接-- webpack将其构建为commonJs模块,因此当服务器需要呈现时,您的入口点可以导出最方便的接口。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接