Я работаю над большой библиотекой 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);
}