На данный момент
- У меня есть файл, написанный на ES6 и используемый приложением create-response-app.
- Я хочу загрузить этот файл в память, преобразовать его в обычный JS и использовать экспортированные значения в одном из моих сценариев, который должен быть общим JS.
Что у меня есть: (на основе сценариев реакции-шаблонов)
const fs = require('fs');
const {
transform
} = require('@babel/core');
const readFile = fileName =>
new Promise((resolve, reject) => {
fs.readFile(
fileName,
'utf8',
(error, value) => (error ? reject(error) : resolve(value)),
);
});
const extractFromFile = async() => {
const presets = [
[
'@babel/preset-env',
{
modules: false,
},
],
'@babel/preset-react'
];
const plugins = [
'@babel/plugin-transform-modules-commonjs'
];
const filename = './xyz.js';
try {
const code = await readFile(filename);
const output = await transform(code, {
filename,
presets,
plugins
});
// Here ... !!
// if i write output.code to file and read it from, i can access the exported values
// but if i try something like this: const foo = require(output.code) or any other
// combination that i can think off, i get undefined or errors.
console.log(output)
}
}
Вопрос: как можно получить экспортированные значения этого файла, не сохраняя его сначала в файл и не требуя его обратно?
EDIT :
"... использовать экспортированные значения в одном из моих сценариев, которые должны быть общими JS ..."
Я пытаюсь создать сценарий который извлекал бы сообщения response-intl из моего проекта.
Я нашел очень полезный скрипт , написанный людьми проекта response-template, и использовал его в своем проекте.
Файл, который я пытаюсь загрузить, - это i18n. js, а в их проекте он написан общим JS с комментарием
ВАЖНО : Этот файл используется встроенным * скриптом extract-intl
сборки и должен использовать синтаксис модуля Common JS * Вы НЕ МОЖЕТЕ использовать импорт / экспорт в этом файле.
НО: Я использую create- react-app и, насколько мне известно (и то, что я тестировал), я не могу использовать modules.exports, так как он нарушает скрипт yarn run build, и я не хочу извлекать приложение.
Спасибо