Giter VIP home page Giter VIP logo

vite-plugin-remain-exports's Introduction

简体中文 | English

Vite-Plugin-Remain-Exports

This plugin is aimed to remaining the exports from entry scripts that imported by entry HTML.

1. Use case

It is important for those micro frond-end project builded with ES-Module style.

Some micro frond-end framework, like IceStark, need each micro modules export two life-cycle: mount and unmount.

If entry scripts can't export those two life-cycle, the micro module would't been rendered to page.

2. Usage

2.1 Install

npm i -D vite-plugin-remain-exports
yarn add -D vite-plugin-remain-exports
pnpm i -D vite-plugin-remain-exports

2.2 Using plugin

import remainExports from 'vite-plugin-remain-exports'

// @see https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    // ...other plugins
    remainExports(),
  ],
})

3. Core Theory

As follow, it is an entry html in vite project:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/src/favicon.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite App</title>
  </head>
  <body>
    <div id="root"></div>
    <script type="module" src="/src/main.tsx"></script>
  </body>
</html>

And the entry scripts imported by entry html is /src/main.tsx.

3.1 How entry html was handled by vite

By default, vite will transfer the entry html to the following js code:

import "vite/modulepreload-polyfill";

import "/src/main.tsx";

The build process of vite is based on rollup. For the rollup project, entry html is the entry file. And in the build process, rollup will only remain the exports of entry file, then tree-shaking other depends.

So for remaining the entry scripts (main.tsx) exports, we need some magic. Here leading in a concept -- module double.

3.2 Module double

// index.ts
export * from 'another.ts'

// another.ts
export const demo = 1;

For importers, index.ts and another.ts is working the same.

3.3 Plugin core

After introducing how entry html was handled by vite and the module double concept, we can modify the transfer result of entry html, as following:

export * from "vite/modulepreload-polyfill";

export * from "/src/main.tsx";

Thus, for vite user, the entry scripts (main.tsx)work as the entry file, and the exports of them will can be remained.

vite-plugin-remain-exports's People

Contributors

coconilu avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.