148 lines
3.5 KiB
Plaintext
148 lines
3.5 KiB
Plaintext
import { CodeTabs, CodeTab } from "docs-ui"
|
||
|
||
export const metadata = {
|
||
title: `${pageNumber} Module Options`,
|
||
}
|
||
|
||
# {metadata.title}
|
||
|
||
In this chapter, you’ll learn about passing options to your Module from the Medusa application’s configurations and using them in the Module’s resources.
|
||
|
||
## What are Module Options?
|
||
|
||
A module can receive options to customize or configure its functionality.
|
||
|
||
For example, if you’re creating a module that integrates a third-party service, you’ll want to receive the integration credentials in the options rather than adding them directly in your code.
|
||
|
||
A module can receive options when they’re added to the Medusa application’s configuration.
|
||
|
||
---
|
||
|
||
## How to Pass Options to a Module?
|
||
|
||
To pass options to a module, add an `options` property to the module’s configuration in `medusa-config.js`.
|
||
|
||
For example:
|
||
|
||
```js title="medusa-config.js"
|
||
const modules = {
|
||
helloModuleService: {
|
||
resolve: "./dist/modules/hello",
|
||
options: {
|
||
capitalize: true,
|
||
},
|
||
},
|
||
// ...
|
||
}
|
||
```
|
||
|
||
The `options` property’s value is an object. You can pass any properties you want.
|
||
|
||
---
|
||
|
||
## Access Module Options in Main Service
|
||
|
||
The module’s main service receives the module’s declaration as a second parameter. The module declaration is an object having an `options` property. Use it to access the options passed from the Module’s configurations.
|
||
|
||
For example:
|
||
|
||
<CodeTabs groupId="service-type">
|
||
<CodeTab label="Using Service Factory" value="service-factory">
|
||
|
||
```ts highlights={[["24"], ["28"], ["29"], ["30"]]}
|
||
// other imports...
|
||
import { InternalModuleDeclaration } from "@medusajs/types"
|
||
|
||
// ...
|
||
|
||
// recommended to define type in another file
|
||
type HelloModuleOptions = {
|
||
capitalize?: boolean
|
||
}
|
||
|
||
class HelloModuleService extends ModulesSdkUtils
|
||
.abstractModuleServiceFactory<
|
||
// ...
|
||
>(
|
||
// ...
|
||
) {
|
||
// ...
|
||
protected options_: HelloModuleOptions
|
||
|
||
constructor(
|
||
{
|
||
// ...
|
||
}: InjectedDependencies,
|
||
protected readonly moduleDeclaration: InternalModuleDeclaration
|
||
) {
|
||
//...
|
||
|
||
this.options_ = moduleDeclaration.options || {
|
||
capitalize: false,
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
</CodeTab>
|
||
<CodeTab label="Without Service Factory" value="no-service-factory">
|
||
|
||
```ts highlights={[["9"], ["13"], ["14"], ["16"], ["17"], ["18"]]}
|
||
import { InternalModuleDeclaration } from "@medusajs/types"
|
||
|
||
// recommended to define type in another file
|
||
type HelloModuleOptions = {
|
||
capitalize?: boolean
|
||
}
|
||
|
||
export default class HelloModuleService {
|
||
protected options_: HelloModuleOptions
|
||
|
||
constructor(
|
||
{},
|
||
protected readonly moduleDeclaration:
|
||
InternalModuleDeclaration
|
||
) {
|
||
this.options_ = moduleDeclaration.options || {
|
||
capitalize: false,
|
||
}
|
||
}
|
||
|
||
getMessage() {
|
||
return "Hello, world!"
|
||
}
|
||
}
|
||
```
|
||
|
||
</CodeTab>
|
||
</CodeTabs>
|
||
|
||
---
|
||
|
||
## Access Module Options in Loader
|
||
|
||
The object that a module’s loaders receive as a parameter has an `options` property. Use it to access the options passed from the Module’s configurations.
|
||
|
||
For example:
|
||
|
||
```ts title="src/modules/hello/loaders/hello-world.ts" highlights={[["11"], ["16"]]}
|
||
import {
|
||
LoaderOptions,
|
||
} from "@medusajs/modules-sdk"
|
||
|
||
// recommended to define type in another file
|
||
type HelloModuleOptions = {
|
||
capitalize?: boolean
|
||
}
|
||
|
||
export default function helloWorldLoader({
|
||
options,
|
||
}: LoaderOptions<HelloModuleOptions>) {
|
||
|
||
console.log(
|
||
"[HELLO MODULE] Just started the Medusa application!",
|
||
options
|
||
)
|
||
}
|
||
```
|