JavaScript Modules

Learn how to organize your plugin code across multiple JavaScript files using modules

Overview

UXP plugins support modular JavaScript development, allowing you to organize your code across multiple files for better maintainability and structure. This is particularly valuable for complex plugins where separating functionality into distinct modules improves code organization and reusability.

UXP uses the CommonJS module system with require() statements for importing modules and module.exports for exporting functionality.

Implementation

Exporting Modules

To make functions, objects, or variables available to other files, use module.exports in your module file:

Copied to your clipboard
// Export individual functions
function multiply(a, b) {
return a * b;
}
function getAnswer() {
return 42;
}
// Export an object containing all functions
module.exports = {
multiply,
getAnswer
};

Importing Modules

Use the require() statement to import modules into your main file or other modules:

Copied to your clipboard
// Import the entire module object
const utils = require("./utils.js");
const result = utils.multiply(3, 2); // returns 6
// Or use destructuring to import specific functions
const { multiply, getAnswer } = require("./utils.js");
const answer = getAnswer(); // returns 42

Directory Structure

You can organize modules in subdirectories using relative paths:

Copied to your clipboard
my-plugin/
├── index.js
├── lib/
│ ├── calculations.js
│ └── helpers.js
└── components/
└── ui-elements.js
Copied to your clipboard
// Import from subdirectories
const { calculate } = require("./lib/calculations.js");
const { createButton } = require("./components/ui-elements.js");

Example

Here's a practical example of a plugin that uses multiple modules to organize different aspects of functionality:

Copied to your clipboard
const { entrypoints } = require("uxp");
const { processVideo } = require("./lib/video-processor.js");
const { showNotification } = require("./lib/ui-helpers.js");
entrypoints.setup({
commands: {
processCommand: async () => {
try {
await processVideo();
showNotification("Video processing completed!");
} catch (error) {
showNotification("Error: " + error.message);
}
}
}
});

Summary

JavaScript modules in UXP plugins enable better code organization and maintainability by allowing you to split functionality across multiple files.

Key Concepts:

  1. Module exports: Use module.exports to expose functions, objects, or variables from a module file.
  2. Module imports: Use require() with relative paths to import modules into other files.
  3. Directory structure: Organize modules in subdirectories using relative paths for better project structure.
  4. Path requirements: Always specify complete relative paths including the .js extension—UXP doesn't search global paths.
  • Privacy
  • Terms of Use
  • Do not sell or share my personal information
  • AdChoices
Copyright © 2025 Adobe. All rights reserved.