@ikonintegration/esmify v2.1.2
esmify
A dead-simple tool to add import / export ES Module syntax to your browserify builds.
The plugin makes the following changes to your bundler:
- Adds
.mjsextension to module resolution (which take precedence over.jsfiles) - Resolves to
"module"field inpackage.jsonwhen a"browser"field is not specified - Transforms ES Module syntax (static
import/exportstatements) into CommonJS
Use it with the --plugin or -p flags in browserify:
browserify index.js -p esmify > bundle.jsAlso works with budo and similar tools, for example:
budo index.js --live -- -p esmifyFiles that don't contain import / export syntax are ignored, as are dynamic import expressions. The plugin runs across your bundle (including node_modules) in order to support ESM-authored modules on npm.
Install
Use npm to install.
npm install esmify --save-devAlso can be used via API like so:
browserify({
plugin: [
[ require('esmify'), { /* ... options ... */ } ]
]
});Usage
plugin = esmify(bundler, opt = {})
Returns a browswerify plugin function that operates on bundler with the given options:
mainFieldswhich describes the order of importance of fields in package.json resolution, defaults to[ 'browser', 'module', 'main' ]nodeModules(defaulttrue) to disable the transform on yournode_modulestree, set this tofalse. This will speed up bundling but you may run into issues when trying to import ESM-published code from npm.plainImports(Experimental) this feature will map named imports directly to their CommonJS counterparts, without going through Babel's inter-op functions. This is generally needed for static analysis offs,pathand other tools likeglslifyin browserify. Defaults to[ 'fs', 'path', 'glslify' ].
Under the hood, this uses Babel and plugin-transform-modules-commonjs to provide robust inter-op that handles a variety of use cases.
require('esmify/resolve')(id, opts, cb)
Resolve the given id using the module resolution algorithm from esmify, accepting { mainFields } array to opts as well as other options passed to resolve and browser-resolve.
Works like so:
- If mainFields includes a
"browser"field, usebrowser-resolve, otherwise useresolve - Look for package.json fields in order of
mainFields, the first field that exists will be used
License
MIT, see LICENSE.md for details.
4 years ago