如何在InDesign IDJS文件中引入外部脚本?原ExtendScript用//@include
在InDesign IDJS中引入外部脚本的解决方案
先搞清楚:IDJS(InDesign JavaScript)的运行环境和传统ExtendScript不一样,//@include是ExtendScript独有的指令,在IDJS里不好使;Node.js的require和ES6的import也不能直接用,因为InDesign的JS环境不是完整的Node或浏览器环境。
下面是两种靠谱的实现方式:
1. 用$.evalFile()加载外部脚本
这是IDJS环境官方推荐的方法,本质是读取外部JS文件内容并执行,效果和//@include类似。
示例代码:
// 加载同目录下的externalScript.js const scriptPath = File($.fileName).parent.fsName + "/externalScript.js"; $.evalFile(scriptPath); // 之后直接调用外部脚本里的函数或变量就行 externalFunction();
- 重点:
$.fileName是当前脚本的路径,通过parent拿到父目录,再拼上外部脚本的文件名,能避免路径写错。 - 如果外部脚本在固定位置,也可以直接写绝对路径,比如:
$.evalFile("C:/MyScripts/externalScript.js");
2. 用ES6模块(需满足版本要求)
要是想用ES6的import语法,得满足两个条件:
- 主脚本和外部脚本都改成ES模块格式:把扩展名改成
.mjs(InDesign主要认这个) - 外部脚本里用
export导出需要的内容
示例:
外部脚本utils.mjs:
export function formatText(text) { return text.toUpperCase(); }
主脚本main.mjs:
import { formatText } from "./utils.mjs"; // 直接调用导出的函数 alert(formatText("hello"));
- 注意:路径必须是相对路径(以
./或../开头),绝对路径在InDesign的ES模块环境里可能识别不了。 - 这种方式只支持InDesign 2022及以后的版本,旧版本别折腾这个。
踩坑排查
- 路径错了:优先用相对路径结合
$.fileName动态获取,别硬写绝对路径,换设备容易出问题。 - 权限问题:如果脚本放在系统受限制的目录(比如Program Files),可能加载失败,建议移到自己建的脚本文件夹里。
- 版本不兼容:ES模块语法只在新的InDesign版本里支持,老版本老实用
$.evalFile()。
内容的提问来源于stack exchange,提问作者Brett
相关产品推荐
相关产品推荐

