我们正在编写一堆 .jsx 脚本,在每个脚本中我都必须模拟一些函数,以便我可以使用 Array.map() 和 String.trim() 之类的东西,但我不想包含该代码在每个脚本的顶部。
有没有办法在 .jsx 脚本文件中“包含”其他 .jsx 脚本?
我们正在编写一堆 .jsx 脚本,在每个脚本中我都必须模拟一些函数,以便我可以使用 Array.map() 和 String.trim() 之类的东西,但我不想包含该代码在每个脚本的顶部。
有没有办法在 .jsx 脚本文件中“包含”其他 .jsx 脚本?
或者您可以简单地在脚本顶部使用#include
和预处理器指令。您可以在Adobe 的“JavaScript 工具指南”#includepath
中找到详细说明。
例如,如果要包含scripts/helper.jsx
在.jsx
文件中:
#include "scripts/helpers.jsx"
// the rest of your code below ...
把这个留给像我这样正在寻找这个的人。在 Adobe Illustrator CC 2015 中,我无法开始#include
工作,但可以@include
。例如:
function alertTheWordNo(){
alert('NO');
}
//@include 'foo.jsx';
alertTheWordNo();
免责声明:我找不到任何相关文档,但已使用 Adobe Illustrator CC 2015 对其进行了测试,并且可以正常工作。
希望这可以帮助某人。如果有人有任何问题,就问吧!
我们现在正在使用$
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/");
只是想在 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>