🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@shined/babel-plugin-transform-import-declaration

Package Overview
Dependencies
Maintainers
4
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@shined/babel-plugin-transform-import-declaration

A Babel plugin to transform import declarations for tree-shaking and on-demand loading

Source
npmnpm
Version
0.0.2
Version published
Weekly downloads
30
150%
Maintainers
4
Weekly downloads
 
Created
Source

@shined/babel-plugin-transform-import-declaration

A Babel plugin to transform import declarations for tree-shaking and on-demand loading.

Features

  • ✅ Transform named imports to optimized imports
  • ✅ Support 4 filename transformation types (kebabCase, camelCase, snakeCase, pascalCase)
  • ✅ Support 3 import specifier types (default, named, namespace)
  • ✅ Support include/exclude filtering with mutual exclusivity
  • ✅ Support multiple transformation rules
  • ✅ Support side-effect imports (e.g., styles)
  • ✅ Template variable replacement

Installation

npm install --save-dev @shined/babel-plugin-transform-import-declaration
# or
pnpm add -D @shined/babel-plugin-transform-import-declaration
# or
yarn add -D @shined/babel-plugin-transform-import-declaration

Usage

Basic Example

.babelrc

{
  "plugins": [
    [
      "@shined/babel-plugin-transform-import-declaration",
      {
        "config": [
          {
            "source": "antd",
            "filename": "kebabCase",
            "output": ["antd/es/{{ filename }}.js"]
          }
        ]
      }
    ]
  ]
}

Input:

import { Button, DatePicker } from 'antd';

Output:

import Button from 'antd/es/button.js';
import DatePicker from 'antd/es/date-picker.js';

With Style Imports

{
  "config": [
    {
      "source": "antd",
      "filename": "kebabCase",
      "output": [
        "antd/es/{{ filename }}.js",
        "antd/es/{{ filename }}/style/css"
      ]
    }
  ]
}

Output:

import Button from 'antd/es/button.js';
import 'antd/es/button/style/css';
import DatePicker from 'antd/es/date-picker.js';
import 'antd/es/date-picker/style/css';

With Exclude

{
  "config": [
    {
      "source": "antd",
      "filename": "kebabCase",
      "output": ["antd/es/{{ filename }}.js"],
      "exclude": ["Button"]
    }
  ]
}

Input:

import { Button, DatePicker } from 'antd';

Output:

import { Button } from 'antd';
import DatePicker from 'antd/es/date-picker.js';

Multiple Configs

{
  "config": [
    {
      "source": "antd",
      "filename": "kebabCase",
      "output": [
        "antd/es/{{ filename }}.js",
        "antd/css/{{ filename }}.css"
      ],
      "exclude": ["Button"]
    },
    {
      "source": "antd",
      "filename": "kebabCase",
      "output": [
        "antd/es/{{ filename }}.js",
        "antd/css/{{ filename }}.png"
      ],
      "include": ["Button"]
    }
  ]
}

Configuration

TransformConfig

OptionTypeRequiredDefaultDescription
sourcestringYes-Source module name to match
filenameFilenameCaseYes-Filename transformation rule
outputstring[]Yes-Output path templates
specifierSpecifierTypeNo'default'Import specifier type
includestring[]No-Only process these components (whitelist)
excludestring[]No-Exclude these components (blacklist)

Note: include and exclude are mutually exclusive. You cannot use both in the same config.

FilenameCase

ValueDescriptionExample
kebabCaseLowercase with hyphensButtonbutton, DatePickerdate-picker
camelCaseFirst letter lowercaseButtonbutton, DatePickerdatePicker
snakeCaseLowercase with underscoresButtonbutton, DatePickerdate_picker
pascalCaseKeep as PascalCaseButtonButton, DatePickerDatePicker

SpecifierType

ValueGenerated ImportUse Case
defaultimport Button from "path"Module uses export default
namedimport { Button } from "path"Module uses export { Button }
namespaceimport * as Button from "path"Import entire module as object

Examples

Example 1: Basic Transform

// Config
{
  "source": "antd",
  "filename": "kebabCase",
  "output": ["antd/es/{{ filename }}.js"]
}

// Input
import { Button } from "antd";

// Output
import Button from "antd/es/button.js";

Example 2: Named Specifier

// Config
{
  "source": "lodash",
  "filename": "kebabCase",
  "output": ["lodash/{{ filename }}.js"],
  "specifier": "named"
}

// Input
import { debounce } from "lodash";

// Output
import { debounce } from "lodash/debounce.js";

Example 3: Namespace Specifier

// Config
{
  "source": "utils",
  "filename": "camelCase",
  "output": ["utils/{{ filename }}.js"],
  "specifier": "namespace"
}

// Input
import { DateUtils } from "utils";

// Output
import * as DateUtils from "utils/dateUtils.js";

Example 4: Different Filename Cases

// snakeCase
import { DatePicker } from "antd";
// → import DatePicker from "antd/es/date_picker.js";

// PascalCase
import { DatePicker } from "antd";
// → import DatePicker from "antd/es/DatePicker.js";

Development

# Install dependencies
pnpm install

# Run tests
pnpm test

# Watch mode
pnpm test:watch

# Build
pnpm build

# Watch build
pnpm dev

Testing

This plugin includes comprehensive tests:

  • 11 unit tests for transformation utilities
  • 11 integration tests for the Babel plugin

All 22 tests pass ✅

Comparison with SWC Plugin

If you're looking for better performance, consider using the SWC version:

  • @shined/swc-plugin-transform-import-declaration - Faster compilation with Rust/WebAssembly
  • Same features and configuration
  • Significantly better performance for large projects

License

MIT

Author

ityuany

Issues & Contributions

Found a bug or want to contribute? Visit our GitHub repository

Keywords

babel

FAQs

Package last updated on 21 Nov 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts