如何为ES6动态导入功能设置当前目录

时间:2020-01-29 04:01:25

标签: javascript node.js dynamic ecmascript-6 import

我有这个目录树:

project
  |
  -> dir1
      |
      -> dir2
          |
          -> module.mjs

     server.mjs
     utils.mjs

我当前的工作目录是:

 project/

server.mjs的源代码

async function main(){
    var module = await import("./dir1/dir2/module.mjs");
}

main();

module.mjs的源代码

//this works!
import utils from "../../utils.mjs";

//this fails!
import utils from "./utils.mjs";

似乎在module.mjs中的静态导入考虑了点“。”。作为其自身的目录,而不是当前的工作目录。

如何为动态导入设置当前目录?
实际的基本问题是:如何避免使用长的“ ../../.......”在动态模块中进行静态导入。

例如,我希望在server.mjs中有这样的内容:

var module = await import("./dir1/dir2/module.mjs",{cwd:"project/"});

或者,在动态模块中,可以使用:

import utils from './utils.mjs'

代替:

import utils from '../../long dot dot/utils.mjs'

2 个答案:

答案 0 :(得分:1)

尝试process.cwd(),它将返回运行nodejs的目录。

答案 1 :(得分:0)

在动态导入的模块中,似乎没有办法用点.引用动态导入的模块。

静态引用。

因此,解决方法仍然是使用dotdot-slashslash ...

我已经在此处向Node.js团队提交了新功能请求:https://github.com/nodejs/node/issues/31822