Adobe XD插件开发遇ReferenceError:Color未定义,求排查方案
Adobe XD插件开发:Color类未定义错误的解决方案
嘿,我一眼就瞅出问题所在啦!你碰到的ReferenceError: Color is not defined错误,核心原因是你没有从正确的模块中导入Color类。虽然有些第三方示例里直接用new Color(),但在XD插件开发环境中,Color是scenegraph模块的成员,必须显式引用才能使用。
修正步骤
从scenegraph模块引入Color类
你已经导入了scenegraph模块,但没有取出Color类,有两种方式可以解决:- 方式一:解构导入Color
let { Color } = require("scenegraph"); - 方式二:通过scenegraph对象直接访问
保留原有的let scenegraph = require("scenegraph");,后续创建实例时写new scenegraph.Color()即可
- 方式一:解构导入Color
调整renditions配置中的Color实例代码
根据你选的导入方式,修改背景色的创建逻辑。
修改后的完整代码
这里用解构导入的方式给你整理好的代码:
async function exportToBmpFunction(selection) { if (selection.items.length == 0) { return; } // 导入所需模块,解构取出Color类 let application = require("application"); let { Color } = require("scenegraph"); let fs = require("uxp").storage.localFileSystem; let shape = selection.items[0]; let file = await fs.getFileForSaving('what.png', { types: ["png"] }); let renditions = [{ node: shape, outputFile: file, type: application.RenditionType.PNG, scale: 1, background: new Color('#FF00CD', 1) }]; application.createRenditions(renditions).then(function(results) { // ...处理输出文件的逻辑... }); } module.exports = { commands: { exportToBmp: exportToBmpFunction } };
如果选第二种方式,只需要把background那一行改成:
background: new scenegraph.Color('#FF00CD', 1)
补充说明
官方文档里的示例有时候会省略通用的模块导入代码,默认读者已经清楚要引入对应模块,所以才会看起来直接用Color。以后开发XD插件时,记得所有API类都要先确认所属模块,再进行导入哦!
内容的提问来源于stack exchange,提问作者Chris Rice




