Node Require and Import

9 浏览
0 Comments

Node Require and Import

我想在Node中创建文件夹,当我使用require模块(commonjs)时一切正常,但当我将package.json中的类型更改为module并使用import时,文件夹不会被创建,我可能做错了什么?

0
0 Comments

在使用ES6模块时,发现无法使用__dirname,于是用'./'替代。如果你希望更优雅一些,可以使用一个npm包。

./将使用当前的工作目录,这个目录可能与__dirname不同。在项目的顶层模块文件中,两者是相同的。但在来自node_modules目录的导入模块中,当前工作目录与__dirname没有任何关联。

0
0 Comments

在ESM模块中没有__dirname。如果你需要它,可以使用以下方法创建它:

import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

但是,fs模块中的许多函数可以更直接地接受import.meta.url。有关详细信息,请参见这个回答

在ESM模块中,没有__dirname这个全局变量。在CommonJS模块中,__dirname表示当前模块的目录路径。然而,在ESM模块中,__dirname被删除了。为了解决这个问题,可以使用上述代码片段来创建一个类似的__dirname变量。

该代码使用import.meta.url获取当前模块的URL,然后使用fileURLToPath函数将URL转换为文件路径。最后,使用path.dirname函数获取目录路径,并将其赋值给__dirname变量。

另外,fs模块的某些函数可以直接接受import.meta.url作为参数,而不需要使用__dirname。有关更多详细信息,请参见上面提供的链接。

通过以上方法,我们可以在ESM模块中模拟出__dirname的功能,使得我们可以继续在ESM模块中使用与路径相关的操作。

0