我有这个目录树:
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'
答案 0 :(得分:1)
尝试process.cwd()
,它将返回运行nodejs的目录。
答案 1 :(得分:0)
在动态导入的模块中,似乎没有办法用点.
引用动态导入的模块。
静态引用。
因此,解决方法仍然是使用dotdot-slashslash ...
我已经在此处向Node.js团队提交了新功能请求:https://github.com/nodejs/node/issues/31822