Adobe .jsx脚本可以包含其他脚本文件吗?

时间:2013-04-01 15:30:13

标签: scripting adobe adobe-illustrator jsx

我们正在写一堆.jsx脚本,每一个我都要模拟一些函数,所以我可以使用像Array.map()和String.trim()这样的东西,但我不是我希望必须在每个脚本的顶部包含该代码。

有没有办法去"包括" .jsx脚本文件中的其他.jsx脚本?

4 个答案:

答案 0 :(得分:10)

或者您可以在脚本顶部使用#include#includepath预处理程序指令。 您可以在Adobe's "JavaScript Tools Guide"中找到详细说明。

例如,如果您想在scripts/helper.jsx文件中加入.jsx

#include "scripts/helpers.jsx"
// the rest of your code below ...

答案 1 :(得分:1)

就像我这样正在寻找这个的人一样离开这里。在Adobe Illustrator CC 2015中,我无法让#include工作,但是@include完成了。例如:

外部文件:foo.jsx

function alertTheWordNo(){
  alert('NO');
}

脚本文件:bar.jsx

//@include 'foo.jsx';
alertTheWordNo();

免责声明:我找不到任何此类文档,但已使用Adobe Illustrator CC 2015对其进行了测试,并且可以正常使用。

希望这有助于某人。如果有人有任何问题请问!

答案 2 :(得分:0)

我们现在使用Illustrator中提供的$帮助程序和$.evalFile()方法。传递一个路径,它将评估文件并返回结果。

我创建了一个小助手,我可以在我的.jsx脚本的顶部包含(当然缩小),这样我就可以Libraries.include("my-other-script")执行adobe_scripts,在我的情况下,将包含我{{1}中的文件1}}根文件夹,位于名为lib的目录中。

// indexOf polyfill from https://gist.github.com/atk/1034425
[].indexOf||(Array.prototype.indexOf=function(a,b,c){for(c=this.length,b=(c+~~b)%c;b<c&&(!(b in this)||this[b]!==a);b++);return b^c?b:-1;});

var Libraries = (function (libPath) {    
    return {
        include: function (path) {
            if (!path.match(/\.jsx$/i)) { 
                path = path + ".jsx"; 
            }
            return $.evalFile(libPath + path);
        }
    };
})($.fileName.split("/").splice(0, $.fileName.split("/").indexOf("adobe_scripts") + 1).join("/") + "/lib/");

我包含的缩小版本:

/**
 * Libraries.include(path) -- path must be relative to adobe_scripts/lib/
 * See: https://gist.github.com/jasonrhodes/5286526
 */
[].indexOf||(Array.prototype.indexOf=function(a,b,c){for(c=this.length,b=(c+~~b)%c;b<c&&(!(b in this)||this[b]!==a);b++);return b^c?b:-1;});var Libraries=function(a){return{include:function(b){return b.match(/\.jsx$/i)||(b+=".jsx"),$.evalFile(a+b)}}}($.fileName.split("/").splice(0,$.fileName.split("/").indexOf("adobe_scripts")+1).join("/")+"/lib/");

请参阅此处的要点:https://gist.github.com/jasonrhodes/5286526

答案 3 :(得分:0)

只想在Ike10的答案中添加注释。无证件是慷慨的-这是我20多年编写代码以来遇到的最糟糕的“证件”。在我看来,在主JSX文件加载/评估外部文件之前,还必须将CEFCommandLine参数添加到manifest.xml文件中:

<Resources>
    <MainPath>./whatever.html</MainPath>
    <ScriptPath>./jsx/whatever.jsx</ScriptPath>
    <CEFCommandLine>
        <Parameter>--allow-file-access</Parameter>
        <Parameter>--allow-file-access-from-files</Parameter>
    </CEFCommandLine>
</Resources>