vite-plugin / vite-plugin-commonjs

A pure JavaScript implementation for CommonJs
MIT License
96 stars 14 forks source link

feat: support advanced import rules option #35

Closed Jinjiang closed 10 months ago

Jinjiang commented 10 months ago

To support #34

Add an option: advanced?.importRules?: ImportType | ((id: string) => ImportType)

e.g.:

type ImportType = 'defaultFirst' | 'namedFirst' | 'merge'

commonjs({
  advanced: {
    importRules: 'merge'
  }
})

commonjs({
  advanced: {
    importRules: 'namedFirst'
  }
})

commonjs({
  advanced: {
    importRules(id) {
      if (id.includes('named-first-package-path')) {
        return 'namedFirst'
      }
      // ...
    }
  }
})

generated code:

// defaultFirst
import * as foo from 'foo'
foo.default || foo

// namedFirst
import * as foo from 'foo'
Object.keys(foo).join('') !== 'default' ? foo : foo.default

// merge
import * as foo from 'foo'
foo.default ? Object.assign(foo.default, foo) : foo

Thanks.