【问题标题】:Node Require and Import节点要求和导入
【发布时间】:2021-12-31 17:23:33
【问题描述】:
import path from 'path';
import fs from 'fs';

fs.mkdirSync(path.join(__dirname, 'folderName'));

我想在节点中创建目录,当我需要模块 (commonjs) 时一切正常,但是当我将 package.json 中的类型更改为 module 并使用导入时,文件夹没有被创建,我能做什么做错了吗?

【问题讨论】:

  • ESM 模块中没有__dirname。您必须从import.meta.url 制造它。您可以搜索并找到有关如何执行此操作的示例。例如,请参阅here

标签: node.js ecmascript-6 es6-modules ecmascript-5


【解决方案1】:

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。有关详细信息,请参阅this other answer

【讨论】:

    【解决方案2】:

    我认为 __dirname 在 es6 模块上不可用,所以我将其替换为 './'。如果你正在寻找优雅,你可以使用 npm 包。

    【讨论】:

    • ./ 将使用当前工作目录,该目录可能与__dirname 相同也可能不同。在您项目的顶级模块文件中,这将是同一件事。在从node_modules 目录导入的模块中,当前工作目录将与__dirname 本来的内容完全没有联系。
    猜你喜欢
    • 2019-11-20
    • 2017-07-17
    • 1970-01-01
    • 2018-03-11
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2016-06-14
    相关资源
    最近更新 更多