unquire

1.0.1 • Public • Published

unquire

This is a very simple require() polyfill for browsers that loads packages from https://unpkg.com/.

It supports simple packages only and doesn't work for generic ones — the main intention was to be able to launch up-to-date library demo sites on GitHub Pages without having to re-build the bundle after every update.

How does it work?

First, it statically analyzes the code for require presence and recursively loads the require-d files from https://unpkg.com/, asynchronously.

Then, it dynamically evaluates modules code, providing a synchronous require() implementation using the pre-loaded files.

If some deps names are computed dynamically — those are loaded synchronously at the dynamic evaluation step. Dynamic evaluation does not support loading new packages, only files with full or relative paths.

Caveats

  • Most of Node.js API is not supported (some could be loaded from ecosystem).
  • Dynamic require() arguments are supported only partially.
  • Only latest versions of packages are loaded by default.
  • This loads packages from a thirdparty CDN.
  • css files are not loaded, you have to specify them manually.

Not recommended to use this in production — the main intention of this package is make building GitHub Pages demo sites easier, without having to bundle stuff.

How to use?

Most simple setup:

  <script defer src="https://unpkg.com/unqire@1"></script> 
</head>
<body data-require-main="./main.js">

The libary registers a single global require function, so, alternatively, require.async('./main.js') could be used (returns a Promise).

require('./main.js') also works, but without preloading it would try to load the deps synchronously (which doesn't support loading packages by their names). You should avoid doing that from your top-level code.

The above affects only the entry point — inside ./main.js (and other require()-d code), use synchronous require() as usual — file loads will be done asynchronously.

Also, you can specify a specific version or version range when loading a package, e.g. require('codemirror@5').

Readme

Keywords

none

Package Sidebar

Install

npm i unquire

Weekly Downloads

1

Version

1.0.1

License

MIT

Unpacked Size

8.59 kB

Total Files

4

Last publish

Collaborators

  • chalker