Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

vite-plugin-dynamic-import

Package Overview
Dependencies
Maintainers
1
Versions
52
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

vite-plugin-dynamic-import

Enhance Vite builtin dynamic import

  • 0.5.0
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

vite-plugin-dynamic-import NPM version awesome-vite

Enhance Vite builtin dynamic import

English | 简体中文

  • Support alias
  • Based on the glob looser restrictions

Install

npm i vite-plugin-dynamic-import -D

Usage

import dynamicImport from 'vite-plugin-dynamic-import'

export default {
  plugins: [
    dynamicImport()
  ]
}

See more cases 👉 playground/vite-plugin-dynamic-import

API

DynamicImport([options])

options: DynamicImportOptions
export interface DynamicImportOptions {
  filter?: (...args: Parameters<Plugin['transform']>) => false | void | Promise<false | void>
}

See the filter args vite/src/node/plugin.ts#L131

How and why?

We assume that the project structure is as follows

├─┬ src
│ ├─┬ views
│ │ ├─┬ foo
│ │ │ └── index.js
│ │ └── bar.js
│ └── router.js
└── vite.config.js
// vite.config.js
export default {
  resolve: {
    alias: {
      // "@" -> "/User/project-root/src/views"
      '@': path.join(__dirname, 'src/views'),
    },
  },
}

Dynamic import is not well supported in Vite, such as

  • Alias are not supported
// router.jsimport(`@/views/${variable}.js`)
  • Must be relative
// router.jsimport(`/User/project-root/src/views/${variable}.js`)
  • Must have extension
// router.jsimport(`./views/${variable}`)

We try to fix these problems

For the alias in import(), we can calculate the relative path according to UserConfig.root

// router.jsimport(`./views/${variable}.js`)

If the import path has no suffix, we use glob to find the file according to UserConfig.resolve.extensions and supplement the suffix of the import path.
So we need to list all the possibilities

  1. transpire dynamic import variable, yout can see @rollup/plugin-dynamic-import-vars

./views/${variable} -> ./views/*

  1. generate runtime code
- // import(`./views/${variable}`)
+ __variableDynamicImportRuntime(`./views/${variable}`)

+ function __variableDynamicImportRuntime(path) {
+   switch (path) {
+     case 'foo':
+     case 'foo/index':
+     case 'foo/index.js':
+       return import('./views/foo/index.js');
+ 
+     case 'bar':
+     case 'bar.js':
+       return import('./views/bar.js');
+ }

TODO

  • support alias.customResolver

Keywords

FAQs

Package last updated on 31 Mar 2022

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc