Машинописный текст: необязательный импорт пакета 'fs', браузер vs nodejs - PullRequest
0 голосов
/ 13 апреля 2020

Я работаю над большой библиотекой TypeScript. Большинство из них не зависит от платформы, но есть небольшая функция, которая выиграет от доступа к файловой системе при работе на Node.js. Все мои тесты в настоящее время выполняются на Node.js, и я знаю, что доступ к файлам из изолированной программной среды браузера заблокирован по дизайну, поэтому все в порядке, если эта функция недоступна в браузерах.

Я хотел бы получить условный импорт (или требование), но я понимаю, что не работает. Как я могу обойти это?

Является ли инструмент компоновки JavaScript частью решения, возможно, возвращая нуль при любой неудачной попытке импорта? Кто-нибудь из упаковщиков лучше других?

Вот мой текущий код:

    /**
     * Creates a {@link CodePointCharStream} given a string containing a
     * path to a file on disk and the encoding of the bytes
     * contained in the file.  If no encoding is specified, it defaults to 'utf-8'.
     *
     * Reads the entire contents of the file into the result before returning.
     *
     * For JavaScript this can only work on node.js.   Browsers can't read files.
     */
    export function fromFileName(fileName: string, encoding: string = "utf-8"): CodePointCharStream {
        if (typeof require !== "function") {
            throw new Error("File I/O not supported on this platform.");
        }
        const fs = require("fs");
        const path = require("path");
        fileName = path.resolve(fileName);
        const fileContent = fs.readFileSync(fileName).toString(encoding);
        return fromString(fileContent, fileName);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...