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

Scripting Adobe.jsx脚本可以包含其他脚本文件吗?,scripting,adobe,adobe-illustrator,extendscript,Scripting,Adobe,Adobe Illustrator,Extendscript,我们正在编写一堆.jsx脚本,在每一个脚本中,我都必须模拟一些函数,这样我就可以使用Array.map()和String.trim()之类的东西,但我不想在每个脚本的顶部都包含这些代码 有没有办法在.jsx脚本文件中“包含”其他.jsx脚本?我们现在使用Illustrator中可用的$帮助程序和$.evalFile()方法。向它传递一个路径,它将计算文件并返回结果 我创建了一个小助手,我可以在.jsx脚本的顶部包含(当然是缩小的),这样我就可以执行库.include(“我的其他脚本”),在我的例

我们正在编写一堆.jsx脚本,在每一个脚本中,我都必须模拟一些函数,这样我就可以使用Array.map()和String.trim()之类的东西,但我不想在每个脚本的顶部都包含这些代码


有没有办法在.jsx脚本文件中“包含”其他.jsx脚本?

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

我创建了一个小助手,我可以在.jsx脚本的顶部包含(当然是缩小的),这样我就可以执行
库.include(“我的其他脚本”)
,在我的例子中,它将包含一个文件,该文件位于名为
lib
的目录下的
adobe\u scripts
根文件夹中

// 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/");
//从https://gist.github.com/atk/1034425

[].indexOf | |(Array.prototype.indexOf=function(a,b,c){for(c=this.length,b=(c+~~b)%c;b或者您可以在脚本顶部使用
#include
#includepath
预处理器指令。 您可以在中找到详细说明

例如,如果要在
.jsx
文件中包含
脚本/helper.jsx

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

只是把它留给像我这样正在寻找它的人。在Adobe Illustrator CC 2015中,我无法让
#include
工作,但
@include
工作了。例如:

外部文件:foo.jsx 脚本文件:bar.jsx 免责声明:我找不到这方面的任何文档,但已使用Adobe Illustrator CC 2015对其进行了测试,结果正常


希望这对某人有所帮助。如果有人有任何问题,请提问!

只是想在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>

./whatever.html
./jsx/whatever.jsx
--允许文件访问
--允许从文件访问文件

我意识到这更适合于图形设计的堆栈交换:更好的方法是使用from。我认为这适用于套件中的所有应用程序。要包含require.jsx,只需使用“#include require.jsx”。我如何使用require在jsx中包含js文件?@jkutianskiJust使用
var\uxrequire('下划线'))
看看这个源代码Adobe CC 2017(v21.0.0),include和/@include对我来说都很有用。在,我发现“//@是向后兼容CS和CS2所必需的。这在ESTK章节的JS工具指南中有说明。”所以我想最好是#include。这会起作用,但您必须在manifest.xml中添加一个CEFCommandLine参数以允许文件访问,否则主JSX似乎不会加载或计算外部文件!一直在尝试!谢谢:)
function alertTheWordNo(){
  alert('NO');
}
//@include 'foo.jsx';
alertTheWordNo();
<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>