Я знаю, что есть много вопросов по этой теме c, но это очень точно c, и я попробовал много ответов.
У меня есть электронное приложение, и я хотел бы, чтобы люди добавили свой собственный код javascript, и я подумал, что это будет действительно просто, но у меня есть следующие ограничения:
- Код не будет находиться внутри работающей папки js или node_modules может быть, в другой папке, например
$HOME/.app/plugins
(для простоты названной FOLDER) - Я использую веб-пакет для "сборки" кода приложения.
- Код должен выполняться в процессе рендеринга, а не основной процесс
Что я пробовал:
require("$FOLDER/test/index.js")
Это не работает, поскольку test
находится за пределами папки проекта.
require('module').globalPaths.push("$FOLDER/test/index.js");
require("test")
Не работает в процессе рендеринга, но работает в основном процессе.
Для бега
export NODE_PATH=$FOLDER
npm run start
require("test")
Тот же результат, что и 2
От другой ответ stackoverflow
function loadjs(file) {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = file;
script.onload = function(){
alert("Script is ready!");
console.log(test.defult_id);
};
document.body.appendChild(script);
}
loadjs("$FOLDER/test/index.js")
Создает тег <script src="$FOLDER/test/index.js"></script>
, но никогда не запускает код. Я думаю, это соображения безопасности.
Я думал о том, чтобы прочитать содержимое javascript и затем выполнить строку. Мне не нравится это решение, потому что я думаю, что оно будет неэффективным и не знаю, возникнут ли у меня проблемы со сложным кодом и отображением переменных между кодом рендеринга и строковым кодом.
Другое решение, которое я не пробовал - это прочитать содержимое файла и затем скопировать его в ту же папку, что и приложение, мне тоже не нравится это решение, потому что размер приложения сильно увеличится, и это не стандарт.
Спасибо за чтение!
Редактировать
Я нашел что-то! Если я помещаю require () вне какого-либо класса или функции, он работает, но если я помещаю require внутри функции, он не работает.