You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:55:07