# Source: https://swc.rs/docs/configuration/modules

💡 SWC provides an official JSON Schema for the configuration file.
.swcrc ```{ "$schema" : "https://swc.rs/schema.json" , } ```
# Modules
SWC can transpile your code using ES Modules to CommonJS or UMD/AMD. By default, module statements will remain untouched.
## CommonJS []
To emit a CommonJS module, change the `type `in `.swcrc `:
.swcrc ```{ "$schema" : "https://swc.rs/schema.json" , "module" : { "type" : "commonjs" , // These are defaults. "strict" : false , "strictMode" : true , "lazy" : false , "noInterop" : false } } ```
## ES6 []
To emit a ES6 module, change the `type `in `.swcrc `:
.swcrc ```{ "module" : { "type" : "es6" , // These are defaults. "strict" : false , "strictMode" : true , "lazy" : false , "noInterop" : false } } ```
## AMD []
To emit an AMD module, change the `type `in `.swcrc `:
.swcrc ```{ "module" : { "type" : "amd" , // Optional. If specified, swc emits named AMD module. "moduleId" : "foo" , // These are defaults. "strict" : false , "strictMode" : true , "lazy" : false , "noInterop" : false } } ```
## UMD []
To emit an UMD module, change the `type `in `.swcrc `:
.swcrc ```{ "module" : { "type" : "umd" , "globals" : {}, // These are defaults. "strict" : false , "strictMode" : true , "lazy" : false , "noInterop" : false } } ```
## Shared Options []
These options are shared by `commonjs `/ `es6 `/ `umd `/ `amd `inside `.swcrc `:
.swcrc ```{ "module" : { // You can specify "commonjs", "es6", "amd", "umd" "type" : "commonjs" , "strict" : false , "strictMode" : true , "lazy" : false , "noInterop" : false , "ignoreDynamic" : false , "preserveImportMeta" : false , "outFileExtension" : "js" , } } ```
### strict []
Defaults to `false `. By default, when using exports with SWC, a non-enumerable `__esModule `property is exported. In some cases, this property is used to determine if the import is the default export or if it contains the default export.
To prevent the `__esModule `property from being exported, you can set the strict option to `true `.
### strictMode []
Defaults to `true `. If true, swc emits ‘use strict’ directive.
### lazy []
Defaults to `false `. This option changes Babel’s compiled `import `statements to be lazily evaluated when their imported bindings are used for the first time. This can improve the initial load time of your module because evaluating dependencies upfront is sometimes entirely unnecessary. This is especially the case when implementing a library module.
The value of `lazy `has a few possible effects:
- `false `- No lazy initialization of any imported module.
- `true `- Do not lazy-initialize local `./foo `imports, but lazy-init `foo `dependencies. Local paths are much more likely to have circular dependencies, which may break if loaded lazily, so they are not lazy by default, whereas dependencies between independent modules are rarely cyclical.
- `Array<string> `- Lazy-initialize all imports with source matching one of the given strings.

The two cases where imports can never be lazy are:
- `import "foo"; `Side-effect imports are automatically non-lazy since their very existence means that there is no binding to later kick-off initialization.
- `export from "foo" `Re-exporting all names requires up-front execution because otherwise there is no
way to know what names need to be exported.

### noInterop []
Defaults to `false `. By default, when using exports with swc a non-enumerable `__esModule `property is exported.
This property is then used to determine if the import is the default export or if it contains the default export.
In cases where the auto-unwrapping of default is not needed, you can set the noInterop option to true to avoid the usage of the interopRequireDefault helper (shown in inline form above).
### ignoreDynamic []
If set to `true `, dynamic imports will be preserved.
### preserveImportMeta []
If set to `true `, `import.meta `will be preserved.
### importInterop []
Possible values:
- `swc `(alias: `babel `)
- `node `
- `none `

Defaults to `none `if `noInterop `is true, and `swc `otherwise.
### resolveFully []
When set to `true `, fully resolves module `import `file paths, including any that end with `index.js `.
### outFileExtension []
when supplied with `resolveFully `, this will change the extension of any locally resolved file paths to
be the one specified. You should use this extension to match the `--out-file-extension `option for @swc/cli.