esm无法解析模块别名

时间:2018-11-08 02:02:26

标签: javascript node.js npm

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

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

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

这是我的index.js文件的顶部:

import "module-alias/register"
import "@/setup"

import "@/setup"无效,而require("@/setup")无效。

2 个答案:

答案 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)

对我来说,下面的代码:

package.json

  "scripts": {
    "dev": "pkill -f lib/serverIndex.js; NODE_ENV=development node lib/serverIndex.js",

lib / serverIndex.js

require = require('esm')(module/*, options*/);
require('module-alias/register');
module.exports = require("./server.js");