https://github.com/foolishchow/swc-plugin-import-transform
https://github.com/foolishchow/swc-plugin-import-transform
Last synced: 5 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/foolishchow/swc-plugin-import-transform
- Owner: foolishchow
- Created: 2025-07-05T02:12:25.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-07-05T02:12:49.000Z (12 months ago)
- Last Synced: 2025-07-05T02:29:34.093Z (12 months ago)
- Language: Rust
- Size: 0 Bytes
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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}"
}
}
```