Dynamic import() polyfill

一个用于动态 import() 的快速、微小的 polyfill,可以在所有支持模块的浏览器中使用。「A fast, tiny polyfill for dynamic import() that works in all module-supporting browsers」

  • 所有者: GoogleChromeLabs/dynamic-import-polyfill
  • 平台: Linux, Mac, Windows
  • 許可證: MIT License
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

Dynamic import() polyfill

A fast, tiny polyfill for dynamic import() that works in all module-supporting browsers. The polyfill feature detects built-in import() support and defers to the native version if available. For browsers without module support, you can use the module/nomodule technique to generate a fully ES5-compatible bundle.

Installation

You can install this library from npm by running:

npm install dynamic-import-polyfill

Usage

To use the polyfill, just initialize it once, in your app's main entry point before dynamically importing any modules. If you have multiple entry points, just add it to the entry point that will be evaluated first.

import dynamicImportPolyfill from 'dynamic-import-polyfill';

// This needs to be done before any dynamic imports are used.
dynamicImportPolyfill.initialize({
  modulePath: '/public', // Defaults to '.'
  importFunctionName: '$$import' // Defaults to '__import__'
});

Configuration options

Content Security Policy (CSP)

This polyfill uses new Function() to feature detect dynamic import() support, and that detect will always fail if your Content Security Policy (CSP) does not allow 'unsafe-eval' (which most do not). This is generally fine, however, because the polyfill fallback will be used instead. Just be aware that such CSP policies will prevent the browser from using its native dynamic import(), even when supported.

In addition, this polyfill uses Blob URLs to load modules dynamically, and in order for this to work you must configure your Content Security Policy to allow Blob in your script-src settings.

Here's an example Content Security Policy that works (cross-browser) with this polyfill:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' blob:">

Examples

rollup-native-modules-boilerplate features a complete example demonstrating how to use this polyfill with full, cross-browser support for legacy browsers. For more details on the techniques used in this demo, see Using Native JavaScript Modules in Production Today by @philipwalton.

Limitations

This polyfill does not support import.meta, as it is generally not needed when using a bundler that outputs all your modules to the same directory. Bundlers can also resolve import.meta at build time, so oftentimes import.meta does not appear in the final module output.

If import.meta support is a requirement for your use case, es-module-shims by @guybedford may be an option.

Credits

This polyfill was inspired from prior work in this space by these projects:

License

MIT

主要指標

概覽
名稱與所有者GoogleChromeLabs/dynamic-import-polyfill
主編程語言JavaScript
編程語言JavaScript (語言數: 1)
平台Linux, Mac, Windows
許可證MIT License
所有者活动
創建於2019-08-19 22:25:59
推送於2022-08-08 23:31:45
最后一次提交2022-08-08 16:31:45
發布數2
最新版本名稱0.1.1 (發布於 )
第一版名稱0.1.0 (發布於 )
用户参与
星數323
關注者數8
派生數13
提交數6
已啟用問題?
問題數5
打開的問題數5
拉請求數1
打開的拉請求數6
關閉的拉請求數1
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?