所以我使用的是esmmodule-alias包,但是esm似乎没有注册模块别名的路径。

这是我加载服务器文件的方式:

nodemon -r esm ./src/index.js 8081

这是我的index.js文件的顶部:
import "module-alias/register"
import "@/setup"
import "@/setup"不起作用,而require("@/setup")起作用。

最佳答案

问题是esm会在解析文件时尝试处理所有import语句,然后再加载其他模块。

在处理import语句时,它使用节点的内置require,而不是由require创建的修改后的module-alias

要解决此问题,您需要先加载module-alias,然后再加载esm。这样,module-alias将有机会在require做任何事情之前修改esm函数。

您可以通过将多个-r参数传递给node来实现这一点,但要确保module-alias首先出现:

node -r module-alias/register -r esm index.js 8081

或使用nodemon:

nodemon -r module-alias/register -r esm ./src/index.js 8081

您还需要从代码中删除import "module-alias/register",因为现在是从命令行加载的。

07-28 04:54