1.0.0-next.4 • Published 4 months ago
@flatjs/swc-plugin-import v1.0.0-next.4
@flatjs/swc-plugin-import
A SWC plugin for dynamic imports, enabling on-demand file imports. Written in Rust for better performance.
Installation
yarn add @flatjs/swc-plugin-import
Usage
Add the @flatjs/swc-plugin-import
plugin to your rspack configuration
export default {
module: {
rules: [
{
test: /\.(jsx|tsx|ts|js|mjs|cjs|mts|cts)$/,
exclude: /node_modules/,
use: {
loader: 'builtin:swc-loader',
options: {
jsc: {
experimental: {
keepImportAttributes: true,
plugins: [
[
requireResolve(
import.meta.url,
'@flatjs/swc-plugin-import'
),
{
modularImports: [
{
libraryName: '@dimjs/utils',
libraryDirectory: 'dist',
transformToDefaultImport: true,
customName:
'@dimjs/utils/dist/{{ kebabCase member }}/index.js',
},
{
libraryName: '@ant-design/icons',
libraryDirectory: 'es/icons',
transformToDefaultImport: true,
camel2DashComponentName: false,
customName:
'@ant-design/icons/es/icons/{{ member }}.js',
},
],
},
],
],
},
},
},
},
},
],
},
};
Development & Testing
- Please use the official installation method. The version installed via homebrew will lack the rustup toolchain and requires manual installation and configuration. rustup
- Install Rust environment
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Install the toolchain for compiling WebAssembly version. For more information about rustup toolchains, please refer to rustup
rustup target add wasm32-wasip1
- View installed toolchains
rustup target list
- Testing
- For Rust WASM testing, you can use cargo-related packages for testing.
- Since swc-plugin-import will be loaded into swc for execution, you can also use testing frameworks like vitest for testing.
- Build and Publish
cargo build --release -p swc_plugin_import --target wasm32-wasip1
swc_plugin_import now supports monorepo management, so you can directly use the yarn build
command for building.
Notes
- SWC strongly depends on the version of
@swc/core
. Development needs to be done according to the corresponding swc version. The current project's dependency version information can be found in cargo.toml. - If the plugin is used in rspack, you need to use
builtin:swc-loader
for loading. - Due to performance considerations when calling JS from Rust, the customName implementation in the plugin uses the Handlebars template engine and does not support configuring functions.