我们正在写一堆.jsx脚本,每一个我都要模拟一些函数,所以我可以使用像Array.map()和String.trim()这样的东西,但我不是我希望必须在每个脚本的顶部包含该代码。
有没有办法去"包括" .jsx脚本文件中的其他.jsx脚本?
答案 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
完成了。例如:
function alertTheWordNo(){
alert('NO');
}
//@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/");
答案 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>