A minimalistic CommonJS bundler.
This module is a perfect ascjs companion to create CommonJS bundles.
Passing a single ESM/CJS 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.
.js
files as ESM everywhere, following a simple folder conventionExample of a basic module based on ascjs and asbundle.
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 source-file.js # writes bundle contents to STDOUT
asbundle source-file.js bundle.js # outputs to bundle.js
As module, you can require it and use it to obtain a bundle string.
const asbundle = require('asbundle');
asbundle(sourceFileName);
require.resolve(...)
)__esModule
and .default
conventionThis 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 => 266 bytes minified & gzipped
(function (cache, modules) {
function require(i) { return cache[i] || get(i); }
function get(i) {
var exports = {}, module = {exports: exports};
modules[i].call(exports, window, require, module, exports);
return (cache[i] = module.exports);
}
var main = require(0);
return main.__esModule ? main.default : main;
}([],[function (global, require, module, exports) {
// main.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.