所以我正在使用软件包esm
和module-alias
,但是esm似乎没有注册模块别名的路径。
这是我加载服务器文件的方式:
nodemon -r esm ./src/index.js 8081
这是我的index.js
文件的顶部:
import "module-alias/register"
import "@/setup"
import "@/setup"
无效,而require("@/setup")
无效。
答案 0 :(得分:5)
问题是esm
会在解析文件时尝试处理所有import
语句,而不会加载其他任何模块。
在处理import
语句时,它使用节点的内置require
而不是require
创建的修改后的module-alias
要解决此问题,您需要先加载module-alias
,然后再加载esm
。这样,module-alias
将有机会在require
做任何事情之前修改esm
函数。
您可以通过向节点传递多个-r
参数来实现这一点,但要确保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"
。
答案 1 :(得分:0)
对我来说,下面的代码:
"scripts": {
"dev": "pkill -f lib/serverIndex.js; NODE_ENV=development node lib/serverIndex.js",
require = require('esm')(module/*, options*/);
require('module-alias/register');
module.exports = require("./server.js");