6

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

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

4

4 回答 4

17

或者您可以简单地在脚本顶部使用#include和预处理器指令。您可以在Adob​​e 的“JavaScript 工具指南”#includepath中找到详细说明。

例如,如果要包含scripts/helper.jsx.jsx文件中:

#include "scripts/helpers.jsx"
// the rest of your code below ...
于 2013-05-13T22:30:00.003 回答
3

把这个留给像我这样正在寻找这个的人。在 Adob​​e Illustrator CC 2015 中,我无法开始#include工作,但可以@include。例如:

外部文件:foo.jsx

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

脚本文件:bar.jsx

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

免责声明:我找不到任何相关文档,但已使用 Adob​​e Illustrator CC 2015 对其进行了测试,并且可以正常工作。

希望这可以帮助某人。如果有人有任何问题,就问吧!

于 2016-05-31T00:50:00.640 回答
0

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

我创建了一个小助手,我可以在我的 .jsx 脚本的顶部包含(当然是缩小的),所以我可以这样做Libraries.include("my-other-script"),在我的例子中,我的adobe_scripts根文件夹中的一个文件,在一个名为 .jsx 的目录中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

于 2013-04-02T01:30:57.130 回答
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>
于 2019-06-14T20:02:24.810 回答