Автоматически включить все сценарии из целевой папки в запущенный сценарий - CS6 - PullRequest
2 голосов
/ 01 февраля 2020

Я хочу #include все сценарии из целевой папки динамически в запущенном сценарии. Не нужно писать каждый скрипт имя / путь каждый раз. Это значит: => вы удаляете любой скрипт в целевую папку => когда вы запускаете скрипт, скрипты / скрипт из цели автоматически включаются в запущенный скрипт.

РЕДАКТИРОВАТЬ: Вы также можете вызывать любые функции или переменные из введенного фрагмента кода в любой области. Я написал этот сценарий до сих пор:

var runnedScriptPath = $.fileName;
var runnedScriptFolderPath = getScriptFolder(runnedScriptPath);

var targetScriptsFolderPath = runnedScriptFolderPath + "/foo";
var targetScriptsFolder = Folder(targetScriptsFolderPath);

includeScriptsFromTargetFolder(targetScriptsFolder);

function includeScriptsFromTargetFolder(targetFolder) {

    var targetFolderFiles = targetFolder.getFiles();

    var scriptFilesToInclude = new Array;

    for (var i = 0; i < targetFolderFiles.length; i++) {
        if (targetFolderFiles[i] instanceof File) {
            if (targetFolderFiles[i].toString().match(/.jsx$/)) { // .jsx is extension from Adobe's scripts
                scriptFilesToInclude.push(decodeURIComponent(targetFolderFiles[i]) ); // decodeURIComponent method is used becouse path is URl
            }
        }
    }

    for (var i = 0; i < scriptFilesToInclude.length; i++) {
        #include scriptFilesToInclude[i]; // <=====  this line gives error!
    }

}

function getScriptFolder(scriptPath) {
    return scriptPath.match(/^(.*[\\\/])/g); // match(/^(.*[\\\/])/g) "Select everything before the last forward slash" //
}

Но потом я получил эту ошибку: enter image description here Я не смог найти разумного решения в руководстве по инструментам javascript cs6.pdf в главе «Директивы препроцессора», стр. 235. Я рассуждаю так: scriptFilesToInclude[i] результат - строка, поэтому его следует рассматривать как "some path/runned code folder/foo/bar.jsx". И тогда путь строки загружается в скрипт. Но вместо этого, я полагаю, он попытался найти файл в папке запущенного скрипта с именем: scriptFilesToInclude[i].

==================== ========================================= *======

Примечания: Я пытался использовать eval : eval("#include scriptFiles[i]"); А также JSON .pars () : JSON.parse("#include scriptFiles[i]"); Чтобы обойти ошибку, но она тоже не сработала. Заранее спасибо за любую помощь.

Ответы [ 2 ]

3 голосов
/ 01 февраля 2020

Используйте $.evalFile() вместо eval():

$.evalFile(scriptFiles[i]);
0 голосов
/ 02 февраля 2020

Как уже упоминал @Sergey Kritskiy, должна использоваться функция $.evalFile().
Но его необходимо вызывать в глобальной области, чтобы иметь возможность загружать переменную или функцию из включенного файла в любое место, где вам нужно.

Код:

var runnedScriptPath = $.fileName;
var runnedScriptFolderPath = getScriptFolder(runnedScriptPath);

var targetScriptsFolderPath = runnedScriptFolderPath + "/foo";
var targetScriptsFolder = Folder(targetScriptsFolderPath);

var scriptsToInclude = includeScriptsFromTargetFolder(targetScriptsFolder);

for (var i = 0; i < scriptsToInclude.length; i++) { 
    $.evalFile(scriptsToInclude[i]); // <========= this function has to be invoked in global scope
}

function includeScriptsFromTargetFolder(targetFolder) {

    var targetFolderFiles = targetFolder.getFiles();

    var scriptFilesToInclude = new Array;

    for (var i = 0; i < targetFolderFiles.length; i++) {
        if (targetFolderFiles[i] instanceof File) {
            if (targetFolderFiles[i].toString().match(/.jsx$/)) { // .jsx is extension from Adobe's scripts
                scriptFilesToInclude.push(decodeURIComponent(targetFolderFiles[i]) ); // decodeURIComponent method is used becouse path is URl
            }
        }
    }

    return scriptFilesToInclude;
}

function getScriptFolder(scriptPath) {

    return scriptPath.match(/^(.*[\\\/])/g); // match(/^(.*[\\\/])/g) "Select everything before the last forward slash" //
}
...