Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@puresamari/ts-bundler

puresamari27Apache-2.00.3.5TypeScript support: included

Simple typescript bundler

typescript, bundle, library, modules, module-replacement

readme

TS-Bundler

This is a (super) lightweight typescript bundle library, which I created for my build tool @puresamari/spb since webpack creates way too much overhead.

Installation

npm i[nstall] [--save[-dev]|-D|-S] @puresamari/ts-bundler

Usage

import { TypescriptBundler } from '@puresamari/ts-bundler';

...

// Create the bundler with the file as attribute (file has to be an absolute path)
const bundler = new TypescriptBundler(file);

The bundlers observe method returns a rxjs observable that contains the following values:

interface {
  output: string,
  map: Map<string, {
    content: string;
    node_module: boolean;
    file: string;
    absolutePath: string;
  }>
}

The observe method takes 2 oparameters:

  • Rebundle: should the bundle be compiled when running observe() (default = true)
  • Once, should you only get the first trigger. (default = false)

Example use cases

(To run these please first create a bundler instance like above.)

The examples compile file into test.export.js.

Bundle the module:

import fs from 'fs';

const result = bundler.observe().subscribe(({ output }) => {
  fs.writeFileSync(path.resolve(__dirname, 'test.export.js'), v.output);
});

The same but with file watching and module replacement:

import fs from 'fs';

const result = bundler.observe().subscribe(({ output }) => {
  fs.writeFileSync(path.resolve(__dirname, 'test.export.js'), v.output);
});

bundler.observe(false, true).subscribe(v => {
  v.map.forEach((v, _module) => {
    if (!v?.file || v.node_module) { return; }
    fs.watchFile(v.absolutePath, () => {
      bundler.refreshModule(_module);
    })
  })
});

Bundle once using await:

import fs from 'fs';

fs.writeFileSync(path.resolve(__dirname, 'test.export.js'), await bundle.bundle().output);

Bundle once using promise:

import fs from 'fs';

bundle.bundle().then(({ output }) => fs.writeFileSync(path.resolve(__dirname, 'test.export.js'), output);

changelog

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.2.0 - 25. October 2020

Added

  • Added module replacement

Changed

  • Bundler is now an observable to provide change subscriptions for the module replacement.

0.1.0 - 24. October 2020

Changed

  • Added es6 modules!!!

0.0.8 - 24. October 2020

Changed

  • All module resolution is now smart using src/moduleResolution.ts#resolveModule instead of src/moduleResolution.ts#reqRes.

Added

  • Added test for three js import to add more use cases.

0.0.7 - 5. August 2020

Changed

  • Added new resolve mechanism so that external applications can run this without node.require.resolve

0.0.5 - 4. August 2020

Fixed

  • More dynamic module path reading

0.0.4 - 31. July 2020

Fixed

  • return value of collected module that aren't node_modules

0.0.3 - 31. July 2020

Fixed

  • module resolution for external node_modules

0.0.2 - 31. July 2020

Added

  • node_module module resoltion

Changed

  • split into seperate moduleResolution and file building

0.0.1 - 30. July 2020

Initial version