YurySolovyov / asbundle

A simple CommonJS bundler

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

asbundle

License: ISC donate

A simple CommonJS bundler


This module is a perfect ascjs companion to create CommonJS bundles.

Passing a single source file as path name, it will produce a lightweight, optimized, and minifier friendly bundle, to consume right away without needing global require or runtime discovered CommonJS dependencies.

How to

You can use asbundle as binary utility or as module.

npm install -g asbundle

# to see what you can do
asbundle --help

As executable, you can use asbundle to output, or save, a bundle entry point.

asbundle sourceFileName
asbundle sourceFileName bundleFileName

As module, you can require it and use it to obtain a bundle string.

const asbundle = require('asbundle');

asbundle(sourceFileName);

Features

  • extremely lightweight, based on cherow for performance and reliability
  • it uses ascjs to automatically transform, when needed, ES2015+ modules into CommonJS code
  • understands both relative files and installed packages too (based on require.resolve(...))
  • reproduces a modern and minimalistic CommonJS environments ideal for browsers
  • compatible with Babel __esModule and .default convention

Constrains

  • same constrains of ascjs
  • Node core modules are not brought to the bundle, if a module cannot be resolved as file name it throws

Example

This module can transform main.js entry file via asbundle main.js out.js:

// main.js
import func, {a, b} from './module.js';
const val = 123;
export default function test() {
  console.log('asbundle');
};
export {func, val};

// module.js
export const a = 1, b = 2;
export default function () {
  console.log('module');
};

into the following bundle:

// out.js => 261 bytes compressed & gzipped
((cache, modules) => {
  const require = i => cache[i] || get(i);
  const get = i => {
    const exports = {};
    const module = {exports};
    modules[i].call(exports, window, require, module, exports);
    return (cache[i] = module.exports);
  };
  const main = require(0);
  return main.__esModule ? main.default : main;
})([],[function (global, require, module, exports) {
// test.js
'use strict';
const func = (m => m.__esModule ? m.default : m)(require(1));
const {a, b} = require(1);
const val = 123;
function test() {
  console.log('asbundle');
}
Object.defineProperty(exports, '__esModule', {value: true}).default = test;
exports.func = func;
exports.val = val;
},function (global, require, module, exports) {
// module.js
'use strict';
const a = 1, b = 2;
exports.a = a;
exports.b = b;
Object.defineProperty(exports, '__esModule', {value: true}).default = function () {
  console.log('module');
};
}]);

The main module is returned and executed as default entry so it becomes easy to publish as global variable for Web purposes too. Add a const myModule = prefix to the bundled code and use it right away.

About

A simple CommonJS bundler

License:ISC License


Languages

Language:JavaScript 100.0%