Почему «fs» не работает, когда импортируется как модуль ES6? - PullRequest
0 голосов
/ 03 июня 2018

Почему я получаю такие ошибки, когда пытаюсь использовать новую поддержку Node.js для модулей ES6 (например, с node --experimental-modules script.mjs)?

// script.mjs
import * as fs from 'fs';

// TypeError: fs.readFile is not a function
fs.readFile('data.csv', 'utf8', (err, data) => {
    if (!err) {
        console.log(data);
    }
});
// TypeError: fs.readdirSync is not a function
fs.readdirSync('.').forEach(fileName => {
    console.log(fileName);
});

1 Ответ

0 голосов
/ 03 июня 2018

Вы должны использовать import fs from 'fs', а не import * as fs from 'fs'.

Это потому, что ( хотя бы с точки зрения файлов mjs ) модуль 'fs' экспортирует только одинвещь, которая называется default.Поэтому, если вы пишете import * as fs from 'fs', fs.default.readFile существует, а fs.readFile - нет.Возможно, то же самое относится ко всем модулям Node.js (CommonJS).

В модулях TypeScript (с выводом @ types / node и ES5), вызывающих путаницу, import fs from 'fs' выдает ошибку

error TS1192: Module '"fs"' has no default export

поэтому в TypeScript вы должны написать import * as fs from 'fs'; по умолчанию.Похоже, что это может быть изменено в соответствии с тем, как работают файлы mjs, используя новую опцию "esModuleInterop": true в tsconfig.json.

...