1.1.0 • Published 1 year ago

import-meta-loader v1.1.0

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

import-meta-loader

The plugin allows you to use vite's import.meta syntax with webpack

Install

npm install import-meta-loader --save-dev
# or
yarn add import-meta-loader -D

Usage

For vue-cli

// vue.config.js
const importMetaLoader = require('import-meta-loader')
const path = require('path')

module.exports = {
  // ...
  chainWebpack: (config) => {
    config.module.rule('js')
      .test(/\.js$/)
      .exclude.add(path.resolve('node_modules'))
      .end()
      .use(importMetaLoader)
      .loader('import-meta-loader')
      .options({
        // isVite2: true,
        alias: Object.fromEntries(config.resolve.alias.store)
      })
      .end()
    importMetaLoader.expandVueEnv(config) // make vue cli support environment variables that start width "VITE_APP_" 
    importMetaLoader.moveHtmlTemplate(config) // you need to move /public/index.html to /index.html, /index.html will be the entry
  }
}

For webpack

// webpack.config.js
module.exports = {
  // ...
  module: {
    rules: [
      // ...
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: [
          // ...
          {
            loader: 'import-meta-loader',
            options: {
              // isVite2: true,
              // alias: {}
            }
          }
        ]
      }
    ]
  }
}

Options

namevaluedescription
isVite2Boolean (default: false)vite2 returns a different value than vite3
aliasObjectIf an alias is configured, you need to set this option

Supported API

APIDescription
new URL('filePath', import.meta.url).hrefStatic Asset URL: import.meta.url is a native ESM feature that exposes the current module's URL. Combining it with the native URL constructor, we can obtain the full, resolved URL of a static asset using relative path from a JavaScript module:
import.meta.glob('filePath')Lazy Loaded: Matched files are by default lazy-loaded via dynamic import and will be split into separate chunks during build.
import.meta.glob('filePath', { eager: true })Sync Loaded: import all the modules directly
import.meta.glob('filePath', { import: 'exportName' })Named Imports: It's possible to only import parts of the modules with the import options.
import.meta.glob('filePath1', 'filePath2')Multiple Patterns: The first argument can be an array of globs
import.meta.glob('./dir/*.js', '!**/bar.js')Negative Patterns: Negative glob patterns are also supported (prefixed with !). To ignore some files from the result, you can add exclude glob patterns to the first argument

Examples

// vite => webpack
import.meta.env //=> process.env
import.meta.env.MODE //=> process.env.NODE_ENV
import.meta.env.BASE_URL //=> process.env.BASE_URL
import.meta.env.PROD //=> process.env.NODE_ENV === 'production'
import.meta.env.DEV //=> process.env.NODE_ENV !== 'production'

new URL('filePath', import.meta.url).href //=> require('filePath')

import.meta.glob('filePath') //=> ... require.context('dirPath', useSubdirectories: boolean, RegExp, 'lazy') ...
import.meta.glob('filePath', { eager: true }) //=> vite3 ... require.context('dirPath', useSubdirectories: boolean, RegExp, 'sync') ...
import.meta.globEager('filePath') //=> vite2 ... require.context('dirPath', useSubdirectories: boolean, RegExp, 'sync') ...

// Negative Patterns, Multiple Patterns, Sync Loaded, Named Imports
import.meta.glob(['./dir/*.js', '!**/bar.js'], { import: 'YourExportName', eager: true })

Template

https://github.com/XiaoLin1995/vuecli-vite-template

License

MIT

1.1.0

1 year ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago