An open API service indexing awesome lists of open source software.

https://github.com/foolishchow/swc-plugin-import-transform


https://github.com/foolishchow/swc-plugin-import-transform

Last synced: 5 months ago
JSON representation

Awesome Lists containing this project

README

          

# SWC Plugin Import Transform

[中文文档 (Chinese README)](README.zh-CN.md)

A SWC plugin for transforming named imports into individual module imports, compatible with `babel-plugin-transform-imports` functionality.

## Installation

```bash
npm install swc-plugin-import-transform
```

## Basic Usage

### Configuration in .swcrc

```json
{
"jsc": {
"experimental": {
"plugins": [
[
"swc-plugin-import-transform",
{
"lodash": {
"transform": "lodash/${member}",
"prevent_full_import": true
}
}
]
]
}
}
}
```

### Using with webpack (swc-loader)

```javascript
module.exports = {
module: {
rules: [
{
test: /\.js$/,
use: {
loader: 'swc-loader',
options: {
jsc: {
experimental: {
plugins: [
[
'swc-plugin-import-transform',
{
'lodash': {
transform: 'lodash/${member}',
prevent_full_import: true
}
}
]
]
}
}
}
}
}
]
}
};
```

## Configuration Options

### transform

**Type**: `string | object`

#### String Mode
Specify a transformation path template with template variables:

```json
{
"lodash": {
"transform": "lodash/${member}"
}
}
```

#### Object Mode (Mapping)
Configure individual paths for each member:

```json
{
"ty-ad": {
"transform": {
"BasicForm": "ty-ad/packages/bases/basicForm",
"UploadFile": "ty-ad/packages/bases/upload"
}
}
}
```

### fallback

**Type**: `string`

When `transform` is an object, this is the fallback path used when no member is matched. Supports template variables:

```json
{
"ty-ad": {
"transform": {
"BasicForm": "ty-ad/packages/bases/basicForm"
},
"fallback": "ty-ad/src/utils/${member:snakeCase}"
}
}
```

### prevent_full_import

**Type**: `boolean`
**Default**: `false`

Prevents full imports from being transformed:

```json
{
"lodash": {
"transform": "lodash/${member}",
"prevent_full_import": true
}
}
```

### skip_default_conversion

**Type**: `boolean`
**Default**: `false`

Keeps named import form instead of converting to default import:

```json
{
"element-ui": {
"transform": "element-ui/lib/${member:kebabCase}",
"skip_default_conversion": true
}
}
```

## Template Variables

You can use the following template variables in `transform` or `fallback`:

- `${member}`: Original name
- `${member:camelCase}`: Lower camel case (e.g., `myComponent`)
- `${member:PascalCase}`: Upper camel case (e.g., `MyComponent`)
- `${member:snakeCase}`: Snake case (e.g., `my_component`)
- `${member:kebabCase}`: Kebab case (e.g., `my-component`)
- `${member:SHOUTY_SNAKE_CASE}`: Shouty snake case (e.g., `MY_COMPONENT`)
- `${member:SHOUTY-KEBAB-CASE}`: Shouty kebab case (e.g., `MY-COMPONENT`)

## Transformation Examples

### Basic Transformation

**Input**:
```javascript
import { map, filter, reduce } from 'lodash';
```

**Configuration**:
```json
{
"lodash": {
"transform": "lodash/${member}"
}
}
```

**Output**:
```javascript
import map from 'lodash/map';
import filter from 'lodash/filter';
import reduce from 'lodash/reduce';
```

### Using Case Conversion

**Input**:
```javascript
import { RadioButton } from 'element-ui';
```

**Configuration**:
```json
{
"element-ui": {
"transform": "element-ui/lib/${member:kebabCase}"
}
}
```