【问题标题】:How to set current directory for ES6 dynamic import function如何为 ES6 动态导入功能设置当前目录
【发布时间】:2020-05-14 13:13:45
【问题描述】:

我有这个目录树:

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'

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我知道这是如何获取 cwd,但是如何避免动态模块中静态导入的长 ../../.......
    • 使用process.cwd(),您应该能够获得文件的路径:import utils from (process.cwd() + '/utils.mjs')
    • @Abrikot 不行,"from" 右边必须是字符串常量
    • @Abrikot 添加括号仍然会导致 SyntaxError: Unexpected token
    • 哦,对了,我不知道。那我的解决方案就不行了。然后,您应该尝试使用类似函数的 `import` 关键字:await import(process.cwd() + '/utils.mjs')
    【解决方案2】:

    似乎没有办法在动态导入的模块中使用点. 引用当前工作目录进行静态导入

    所以,解决方法仍然是使用点点斜杠...

    我在这里向 Node.js 团队提交了一个新功能请求:https://github.com/nodejs/node/issues/31822

    【讨论】:

      猜你喜欢
      • 2019-12-05
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      相关资源
      最近更新 更多