0.2.0 • Published 4 years ago
@mizchi/bundler v0.2.0
@mizchi/bundler
My hobby bundler like webpack/rollup. Do not use production.
Features
- Run universal
- Modern JS(ES2019) Target
- only handle ESM
- readable output(but loose)
- treeshake
Example
import { Bundler } from "@mizchi/bundler";
import { format } from "prettier"; // install yourself
const fileMap = {
"/foo.js": "export default 1;",
"/index.js": `import foo from "./foo.js"; console.log(foo); export const index = 1;`,
};
const bundler = new Bundler(fileMap);
(async () => {
const code = await bundler.bundle("/index.js", { optimize: true });
console.log(format(code, { parser: "babel" }));
})();
output
// @mizchi/bundler generate
const _$_exported = {};
const _$_import = (id) =>
_$_exported[id] || _$_modules[id]((_$_exported[id] = {}));
const _$_modules = {
"/foo.js": (_$_exports) => {
_$_exports.default = 1;
return _$_exports;
},
};
// -- entry --
const { default: foo } = _$_import("/foo.js");
console.log(foo);
export const index = 1;
Entry exports are left.
Example: chunks
WIP
Example: Worker
WIP
TODO
- Delete build cache and rebuild
import "./xxx";
export const a = 1;
- Tree shaking
- Detect side effects
- Strip unused import
- Remove modules code by treeshake
- Remove unused exports
- Dynamic import chunks:
bundler.bundleChunks(entry)
- publicPath
- Bundle for worker
export { a }
export { a } from "./b"
export { a as x} from "./b"
- Entry:
export {...}
; - Module:
export * as x from ...
- Entry:
export {...} from ...
Dynamic library features
- Skip import and export those are not relative
- Support import-map
- Use with snowpack
- name resolver on
preservedExternalImports
andWorker
- Rewrite to pikacdn options
- File watcher with node
- Support tsx
- Node fs/promises
Icebox
- Inline Worker
- minilink integration
- compile to single html
LICENSE
MIT