Scripting Adobe.jsx脚本可以包含其他脚本文件吗?
我们正在编写一堆.jsx脚本,在每一个脚本中,我都必须模拟一些函数,这样我就可以使用Array.map()和String.trim()之类的东西,但我不想在每个脚本的顶部都包含这些代码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脚本文件中“包含”其他.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>