A blazing fast js bundler/loader with a comprehensive API :fire:

Overview

A bundler that does it right

Downloads Circle ci npm version monthly downloads from npm code style: prettier
Backers on Open Collective Sponsors on Open Collective Follow FuseBox on Twitter

FuseBox on slack

FUSEBOX v4 is out!

Install:

npm install fuse-box --save-dev
import { fusebox } from 'fuse-box';
fusebox({
  target: 'browser',
  entry: 'src/index.tsx',
  webIndex: {
    template: 'src/index.html',
  },
  devServer: true,
}).runDev();

React demo

Open Collective

FuseBox contributors do this open source work in their free time. If you feel that using FuseBox increases your productivity and you'd like us to invest more time in it, please back us up.

Backers

Support us with a monthly donation and help us continue our activities. Become a backer.

Sponsors

Become a sponsor and get your logo on our README on Github with a link to your site. Become a sponsor

Comments
  • FuseBox 4.0.0 - Alpha release

    FuseBox 4.0.0 - Alpha release

    Hey all! Finally FuseBox 4.0 alpha is here.

    You can try it out in this repository

    New configuration is available for reading here

    There are plenty of breaking changes, but this version introduces a much simpler config, most of things are "assumed" therefore there is no need in plugins. In fact most of the configuration is moved to the main config which makes it nicer and easier to configure.

    v4 is at least 7x-10x faster than v3

    Please start testing, and help out with anything!!! For example documentation ;-)

    opened by nchanged 64
  • Feature Suggestion: addPackage(...) to override what ever is under node_modules/or add new

    Feature Suggestion: addPackage(...) to override what ever is under node_modules/or add new

    Could be useful if we could add a package that overrides what ever is under node_modules This could also be used when making plugins and you want it to load normally in the sample/demo

    const fb = require("fuse-box");
    const fuse = fb.FuseBox;
    
    let fuseBundle= fuse.init({
        homeDir: "./src",
        outFile: "./vendor-bundle.js",
        tsConfig : "tsconfig.json",
        useCache:false,
        plugins: [
            fb.CSSPlugin(),
            fb.HTMLPlugin({ useDefault: true }),
            fb.TypeScriptHelpers()
        ],
        sourceMap: {
            bundleReference: "./vendor-bundle.js.map",
            outFile: "./vendor-bundle.js.map",
        }
    })
    
    fuseBundle.addPackage({
        name:"somethingCool",
        path:"./node_modules/somethingCool/dist/commonjs",
        main:"something.js"
        resources :`
            + **/*.html 
            + utils/**/*.js
            + styles/**/*.css
        `
    })
    
    fuseBundle.addPackage({
        name:"evenCooler",
        path:"./node_modules/evenCooler/src",
        main:"index.ts"
        resources :`
            + **/*.html 
            + utils/**/*.js
            + styles/**/*.css
        `
    })
    
    fuseBundle.addPackage({
        name:"evenCooler",
        path:"./plugin",
        main:"index.ts"
        resources :`
            + **/*.html 
            + /**/*.js
            + /**/*.css
        `
    })
    
    
    
    fuseBundle.devServer(`
        > main.ts
        + **/*.html 
        + **/*.ts 
        + **/*.css
        + evenCooler
        + somethingCool`
    )
    
    

    Update: From gitter

    @vegarringdal that one need some work and discussion hahaahha yes, I would like if I could also add plugins to a package, in case I want to build it from source instead of using built source

    enhancement 
    opened by vegarringdal 55
  • FuseBox 4.0.0 Status

    FuseBox 4.0.0 Status

    EDIT: [email protected] has been released!

    Starting from [email protected] we are entering a new stage where we start testing production builds. Please give you feedback! EDIT: [email protected] is the latest version and any issues not tested against version or newer will be closed.

    Example here

    Things to do:

    Logging

    It's a mess, we need to check the indents and make it all consistent

    • [ ] Fix logging

    Docs

    • [ ] Getting started
    • [ ] Installation
    • [ ] Migrating from v3
    • [ ] Migrating from webpack
    • [ ] Essential config (webindex, cache, homeDir, entry, watcher)
    • [x] Stylesheet
    • [x] How plugins work
    • [x] Plugin development
    • [x] Web worker docs
    • [x] Electron docs
    • [ ] Production builds
    • [ ] Turbo mode

    Electron

    Turbo mode

    • [ ] Typescript turbo mode (workers) - development
    • [ ] Typescript turbo mode (workers) - production
    • [ ] JS turbo mode (workers) (do we need it?)

    CSS

    • [x] Less Plugin
    • [x] Stylus plugin
    • [x] PostCSS Plugin
    • [x] SassPlugin
    • [ ] Possibility to use postCSS in less sass and stylus (after processing)
    • [ ] Css code splitting (comes with JS splitting)
    • [ ] Shared resources (import config file automatically)

    Ui frameworks

    • [ ] Vue
    • [ ] Elm

    WebIndex

    • [ ] Adding consolidate?

    Webworkers

    Production builds

    • [ ] Tree-shaking (the hardest part is completed)
    • [x] Code splitting
    • [x] Manifest
    • [ ] Configuring uglify
    • [ ] Bundle configuration (currently it's automatic app + vendor)

    To discuss

    1. Bundle configuration We need to come with a good approach to configuring the output. Currently, v4 create app.js and vendor.js. We should make it configurable
    runProd({
      bundles: [
        { type : "vendor", include: ['react', 'react-dom'], exposes: ['??'], name: 'react' },
        { type : "vendor", name: 'vendor' },
        { type : "app", name: 'application', excludes : ["./something"], exposes : ["??"] },
      ],
    });
    

    More to come.

    4.0.0 
    opened by nchanged 47
  • New Sparky Proposal 3.0

    New Sparky Proposal 3.0

    It's time to do something about Sparky too.

    It's almost 2018 and using gulp style doesn't cut anymore. Personally, i find it tedious.

    Sparky.task("dist", ["config"]() => { 
    
    })
    

    I am proposing taking advantage of async await syntax instead, and completely re-design Sparky to use a single class. I've seen so many configs, and I noticed a tendency - people want to make a better structure, make it more readable.

    class Tasks extends Sparky {
        // just a class member
        config() {
            return FuseBox.init({
                homeDir: "src",
                output: "dist",
                plugins: [
                    this.isProduction && QuantumPlugin()
                ]
            });
        }
        async copyResources() {
            await this.src("**/assets/**.css").copy("dist/assets/css")
            await this.src("**/data/**.txt").copy("dist/assets/files")
        }
    
        // will be triggered on "node fuse dist"
        async onDist() {
            await this.copyResources();
    
            const fuse = this.config();
            fuse.bundle("app").instructions(">index.ts");
    
            await fuse.run()
        }
    }
    Sparky.attach(Tasks);
    

    Sparky instance will have all the basic functionality e.g watch src and e.t.c So you will be able to do basic operations right from within your task class.

    Tasks will be defined by adding on + name of the task in camel case

    discussion discussion required 3.0.0 
    opened by nchanged 44
  • Import module issue with HMR

    Import module issue with HMR

    fuse-box 2.0.0 The issue can be reproduced with the repo https://github.com/whitecolor/fuse-box-xstream

    TypeError: Cannot read property 'default' of undefined
    
    enhancement discussion 
    opened by wclr 44
  • Support for Aurelia

    Support for Aurelia

    Support for Aurelia would have been nice http://aurelia.io/

    Atm it looks like we need a custom Aurleia-loader.

    Update from gitter channel:

    @devmondo : @vegarringdal we are working now on the loader, stay tuned

    enhancement 
    opened by vegarringdal 40
  • Strange error in fusebox 3.7.1

    Strange error in fusebox 3.7.1

    Hi, I know this may be similar to #225 but it is almost 2 years old now, and I don't think what you discussed could help me, the test file is not on the repo anymore either.

    Anyway, I am using Electron, and when I launch my app with the the command cross-env NODE_ENV='dev' node fuse.js, it builds everything and it creates the development server on port 4444, it then says HMR is enabled. However when it gets to launching Electron itself, there is a error on the dev tools saying Uncaught TypeError: Cannot read property 'env' of undefined at app.js:3, in app.js on line 3 it underlines this auto generated line. https://i.imgur.com/Bj6dup0.png

    I've been told I can't change this and I should report this here.

    Thanks, Ender

    opened by EnderDev 38
  • HMR not updating CSS upon imported module change

    HMR not updating CSS upon imported module change

    As requested in #730, here is the repository that reproduces the issue:

    https://github.com/graforlock/sass-compile-reproduce

    In index.js :

    require('./styles/styles.scss');
    

    the ./styles/styles.scss is:

    @import "../lib/base";
    @import "base/base";
    

    Only updating the CSS of ./styles/styles.scss triggers the HMR change.

    bug 
    opened by graforlock 38
  • CSSPlugin brushup

    CSSPlugin brushup

    Based on a feedback, CSSPlugin requires a deep reconsideration.

    • write should be deprecated (moved a hidden place with big red warning)
    • serve should be deprecated (moved a hidden place with big red warning)

    Pipe option

    CSSPlugin({ pipe : "css/bundle.css"})
    

    The plugin should create a bundle group. Using fie.createFileGroup. This would open a flexible bundle possibilities for people. For example you have 2 processors:

    [ SassPlugin(), CSSPlugin({ pipe : "css/bundle.css"}) ],
    [ LessPlugin(), CSSResourcePlugin(), CSSPlugin({ pipe : "css/bundle.css"}) ]
    

    Each of them is doing own "magic" but will result being in css/bundle.css, which is going to be "officially" registered in the dependency tree (and it is cool πŸ”₯ )

    css/bundle.css will be treated individually by any plugin that supports Bundle Grouping. We can introduce CSSBundleGroupPlugin which could accept various options of dealing with such task. (Writing it to the file system, inline bundle e.t.c)

    Tell me what you think.

    enhancement 
    opened by nchanged 38
  • Debugging in react

    Debugging in react

    In chrome with react, the source maps and error messages do not line up my original code: there are added underscores and the line numbers are different. React dev tools doesn't recognize the app. Is there an example known to have an ideal react typescript dev experience in chrome?

    discussion 
    opened by matt-erhart 34
  • Development only modules are not removed in production

    Development only modules are not removed in production

    if (process.env.NODE_ENV === 'development') {
        require('some-debug-mode-only-module');
    }
    

    When running in prod mode NODE_ENV = 'production'

    1. code of some-debug-mode-only-module still exists in the bundle
    2. this condition if (process.env.NODE_ENV === 'development') { will not be removed by uglifyjs
    bug enhancement 
    opened by unlight 33
  • refactor: replace deprecated String.prototype.substr()

    refactor: replace deprecated String.prototype.substr()

    opened by CommanderRoot 2
  • TypeError: Cannot read property 'filename' of undefined

    TypeError: Cannot read property 'filename' of undefined

    Hi,

    I'm using : "fuse-box": "^4.0.1-next.8", When I run node fuse, to my file fuse.js, got the prob :

    node_modules\fuse-box\env.js:20 SCRIPT_FILE: require.main.filename,

    here my fuse.js file : import { fusebox } from 'fuse-box'; const fuse = fusebox({ entry: 'src/main.ts', target: 'browser', devServer: true, webIndex: { template: 'src/index.html', }, webIndex: true, });

    fuse.runDev();

    opened by evan-boissonnot 4
  • Support Angular 13

    Support Angular 13

    With angular 12, ngcc could be used to upgrade any View Engine libraries to Ivy. Running it once after postinstall did the job.

    But with 13, ngcc is no longer relevant as the linker itself is required to make the conversions.

    A plugin will be required to use this linker.

    One already exists for babel, see link below: https://github.com/angular/angular/tree/master/packages/compiler-cli/linker/babel/src

    https://github.com/angular/angular/issues/43716

    opened by jpike88 0
  • Is it possible to share an assets folder between two projects?

    Is it possible to share an assets folder between two projects?

    I have a website with one assets folder and two fusebox projects. Both of the projects export to a folder in dist:

    Screen Shot 2021-11-08 at 3 04 38 PM

    Neither of these projects can access the assets folder unless I move it into their distRoot. If I make the distRoot the same for both projects, they start overwriting each-other.

    question 
    opened by SephReed 0
  • `rootDir` does not exist in type IPublicOutputConfig

    `rootDir` does not exist in type IPublicOutputConfig

    Following the documentation with this example from this page:

    import { fusebox } from 'fuse-box';
    
    const fuse = fusebox({
    	entry: "src/public/index.ts",
    	target: "browser",
    	devServer: false,
    	webIndex: true,
    });
    
    fuse.runDev({
    	bundles: {
    		rootDir: 'dist/public',
    	}
    });
    

    Results in this error on build:

    fuse.ts:12:3 - error TS2322: Type '{ rootDir: string; }' is not assignable to type 'IPublicOutputConfig'.
      Object literal may only specify known properties, and 'rootDir' does not exist in type 'IPublicOutputConfig'.
    
    12   rootDir: 'dist',
         ~~~~~~~~~~~~~~~
    
    

    Versions:

    % cat package.json 
    {
      "name": "fusebox-study",
      "version": "1.0.0",
      "description": "",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "fuse-box": "^4.0.0",
        "ts-node": "^10.3.0"
      }
    }
    
    opened by petertorelli 0
  • 4.0.0 Dependency bundled as two separate instances in production build

    4.0.0 Dependency bundled as two separate instances in production build

    Minimal example project: https://github.com/draoncc/FuseBox-GraphQL-Apollo-CoreSchema-issue-example

    Run yarn build, followed by node dist/app.js. It should print a GraphQLErrorExt. The issue is that only one instance of "graphql" may be bundled, but when inspecting dist/app.js, graphql seems to be imported twice:

    L32  var graphql_1 = __fusereq(3);
    L107 var graphql_mjs_1 = __fusereq(11);
    

    The only solution seems to be to add "graphql" to the list of ignored dependencies in FuseBox' configuration, and installing it separately.

    How come graphql is imported as two separate instances instead of one, and is this preventable?

    opened by draoncc 0
Releases(v4.0.0)
  • v4.0.0(Dec 21, 2020)

  • v3.7.1(Feb 11, 2019)

    Addresses a few fixes to the release;

    • HOTFIX: automatic path aliases on windows
    • fix: Browser fields in package.json with false values now are skipped and replaced with a dummy package that exports undefined
    Source code(tar.gz)
    Source code(zip)
  • v3.7.0(Feb 5, 2019)

    Bug Fixes

    • Added target es2018 and set it as a default target if non specified (6c6c562)
    • adds stream-browserify as stream polyfill for browser (d6d5bc4)
    • dev-imports should contain es5 only. (#1439) (090ed3e)
    • Domain polyfill syntax error (#1438) (5456c49)
    • Export Babel7Plugin (#1462) (4ee707f)
    • get script language level as number always (4ee2a7d)
    • Sparky: correct target type of SparkyContext (resolve #1464) (5f31611)
    • Hmr does not reload separate css-file changes in a Vue project (#1423) (78339d2)
    • Ignored patterns to watcher (1bc00ca)
    • Sparky: Exit code should equal to 1 in case of an error (e9ca87d), closes #828
    • improve defaults and handling of config files (da8e706)
    • Language level check for required modules (b0acc1e)
    • move CSS insertion from top of head tag to the bottom (#1482) (1a2656b)
    • resolve autoimport when target is server (474e953)
    • Restrict file removal on modules containing computed properties (d5f8cdf), closes #1471
    • specify languageLevel and forcedLnguageLevel explicitly as number (ee02e59)
    • tsconfig baseURL and automatic alias (3d7e228)
    • Watcher should ignore dist folder when homeDir points to './' (1cc41f3)

    Features

    • Add ability to pass optional cli Args to FuseProcess (552df36)
    • Add StyledComponentsPlugin #1366 (#1449) (785cd8f)
    • Add Terser support for minification (#1428) (1a04c70)
    • add tests checking config files loaded correctly (ca96306)
    • Babel7Plugin implementation (#1453) (123a516)
    • Handle resolve urls including protocol (54f3828)
    • improve docs for babel7 plugin with all options and more example (a42055f)
    • Quantum Source Maps (134292c)
    • report diagnostic errors on compilerOptions - #1457 (#1470) (7c9b7bd)
    • resolve injected imports from preset-env on babel7 (7de0ca1)
    • $devServer: Use fusebox logger for HTTPServer logging (46b4bfe)
    • WebIndexPlugin: cssPath property to customise public paths for CSS (c8239d9), closes #1432
    Source code(tar.gz)
    Source code(zip)
  • v3.6.0(Oct 29, 2018)

    Bug Fixes

    • $target: fluent api method target() does not split target and language level (812fa63)
    • CSSModules: use correct CSS file path (#1377) (f3f067f)
    • Quantum: global process and process.env are handled gracefully (341d5ff)
    • allow fine tuning of chokidar to prevent ENOSPC errors (#1384) (563765a)
    • Quantum: Limit process replacement for browser only (7066967)
    • cache busting should not be used if the target is a server (#1394) (ae6595f), closes #1393
    • Entry point in Quantum builds (#1387) (81b404e), closes #1206
    • improved detection of language level for transpilation (769055a), closes #1399
    • improving import syntax detection (d2c9cd6), closes #1414
    • Improving tsConfig, added "extends" support (#1411) (6b7b19d)
    • Remove legacy obj-rest-spread plugin from acorn (a827c62)

    Features

    • add optional filterFn parameter to Bundle.watch() (0c91f20)
    • CSSResourcePlugin: generate hashed file names using relative file path (8f21daf)
    • SassPlugin: Shared resource files in the config (dc59fde)
    • Added domain and dgram browser polyfills (98be8c8), closes #1410
    • Automatically resolve ts files with useTypescriptCompiler (f9e3ecf)
    Source code(tar.gz)
    Source code(zip)
  • v3.5.0(Aug 28, 2018)

    3.5.0 (2018-08-28)

    Bug Fixes

    • don't throw asset reference error on wildcard imports (d594e65)
    • HMR event and sourcemaps reload (86d9811), closes #1324
    • quantum: Ignoring Dynamic imports when mixed with sync imports (dd664d5)
    • Upgrade fs-extra to remove fs.promises API warning (#1341) (e37caef)
    • Quantum: fix Quantum CSS paths without splitConfig (0ec4058)
    • log.showBundledFiles ignored when log.enabled value missing (b1d1b17)
    • match against valid npm namespace + package name (3e2bf8e)
    • Update typescript version to fix a problem with build #1339 (17594a4)
    • watcher can't resume if queue contains a rejecting promise (84dd0f0), closes #1335
    • Quantum: Prevent Quantum from creating empty chunks (24f5915), closes #1297 #1184
    • Quantum: Quantum CSS splitting loads sourcemaps on production (3e548cc)
    • Quantum: Quantum CSS splitting respects hashing (eafee77)
    • Quantum: Quantum file resolution of conflicting libraries (9cea9e5)
    • Quantum: VUE modules ignored dynamic imports (d4be225), closes #1360

    Features

    • add test for scope packages with valid name (d4f26fd)
    • Automatic css splitting and lazy load with dynamic imports (e600da7)
    • New Quantum target - browser/server/universal (#1323) (b77400e)
    • Quantum: Loading CSS chunks before split bundles are loaded and executed (#1355) (89800ef)

    Performance Improvements

    • swap minimist for getopts (eb48f84)
    Source code(tar.gz)
    Source code(zip)
  • v3.4.0(Jul 13, 2018)

    Bug Fixes

    • add error handling, add backward compatability, update docs. (49ebf45)
    • cssFiles keys now use the {packageName}/{pattern} format (3459180)
    • Global keys order is respected in config, fixes #1304 (#1305) (722c501)
    • move devServer fallback after proxy (163ef97)
    • Quantum CSS now respects tree shaking (52637a5)
    • remove node-sass from deps (bf305e2)

    Features

    • Add css splitting with cssFiles quantum config (d3f5491)
    • adjust pre option in webindex to a string instead of an object and update docs. (8d13bd9)
    • Use cssFiles name as key for manifest (fb107ef)
    Source code(tar.gz)
    Source code(zip)
  • v3.3.0(Jun 20, 2018)

    Bug Fixes

    • ConsolidatePlugin- Template engine takes basedir not baseDir (#1236) (0d3dbc2)
    • Copy readme so it's included in npm (836ff48)
    • CSSResource parse error (#1213) (cc4d42c)
    • Error propagation bug. (#1216) (1ad7c71)
    • Fixed a critical bug with CSSPlugin and path overrides (b129f2d)
    • keep original source file extensions when using useTypeScriptCompiler option. (#1278) (5c39c94)
    • Made error message clearer, and included HTML Template file not found error check. (#1207) (66f06bb)
    • Quantum breaks on more than one configured globals (#1223) (f509d19)
    • Remove debug console.log (1d3172c)
    • renaming generated files to allow several vue files in a folder (fcfbfa0)
    • require statements ignored if not 'true' requires. fixes #1142 (#1229) (0b138f2)
    • tests: Remove message from error object to make test compatible with Node 9. (c36ac01)
    • syntheticDefaultExportPolyfill Check if frozen before attempting to defineProperty. (#1235) (2c971e7)

    Features

    • added support for arrays in modulesFolder (#1293) (73e2f73)
    • Automatic alias mapping based on baseDir in tsconfig.json (ts) (8f11040)
    • Consolidate Plugin - Pass baseDir & includeDir as options (#1225) (26e7ebe)
    • devServer fallback (#1265) (1f5bbe3)
    • filesMapping option to CSSResourcePlugin (#1281) (8cd39db)
    • HTTPS devServer option (#1255) (0715cc3)
    • WebIndexPlugin accepts engine option (e0cba10)
    • WebIndexPlugin additional attributes support in script tags (#1246) (f790bfb)
    • Working CLI (install skeletons) (87df46a)
    Source code(tar.gz)
    Source code(zip)
  • v3.2.2(Apr 17, 2018)

  • v3.2.1(Apr 10, 2018)

  • v3.2.0(Apr 6, 2018)

    Bug Fixes

    • #1101 types missing because of using bind (#1104) (76e6600)
    • Add very small memory save (699979e)
    • Added react and react-dom to devDependencies (#1111) (320522f)
    • Allow postcss to to be overridden by options given to the plugin (8dcbc3d)
    • browser nested routes bug with Quantum (#1168) (dda92bb)
    • Catching typescript transpilation errors (#1103) (8c0122a)
    • data URLs handling in CSSResourcePlugin (#1098) (e44448e)
    • Fix and optimize component HMR (adf5223)
    • Fix bugs when using VueComponentPlugin in development. (b32016d)
    • Fix postCSS error "without 'from' option" (#1118) (0ee1cc7)
    • Fix scoped selector in VuePlugin. (#1117) (8d8ef5a)
    • LoaderAPI typeof fix (#1109) (4f5d253)
    • Optimize EnvPlugin when running on electron (a81448c)
    • Optimize VuePlugin when is running on electron (7a5aa0b)
    • PathResolver and browser overrides should respect a module override (2ecd663)
    • Quantum typeof require should not be replaced with replaceTypeOf (d2df9ba), closes #1133
    • Replace arrow functions with function in imports for development (02f2b77)
    • sourcemaps path and windows slashes (14ea0be), closes #1143
    • Stream polyfill returns an empty function (95868e3), closes #1162
    • tslint: fixed all auto-fixable errors in core/FuseBox.ts (a16ab51)
    • tslint: fixed all auto-fixable errors in Log.ts (78594b9)
    • Support tsconfig.json with comments (#1129) (d3e9a8a)
    • Suppress warnings for electron builds (1cf3638), closes #1160
    • Typing error in source map generators (3331cab)
    • typings plugins can consists of strings (3c13991), closes #1169
    • Update the condition for vue HMR (#1120) (83c44ab)
    • use typescript api to parse tsconfig.json (4236a32)

    Features

    • languagelevel: adds template literal as identifier of ES2015 (a99e155)
    • Added ServiceWorker case (1b77d27), closes #1163
    • Add a useOriginalFilenames option to CSSResourcePlugin (78d31a9)
    • Add help messages to Sparky tasks (f68993c)
    • log option now takes an object (enabled, showBundledFiles & clearTerminalOnBundle) (#1136) (600b204)
    • Quantum definedExpressions option (#1105) (4d846d2)
    • sorted bundle sources (c1ba79f)
    • stdin option (#1121) (cf975ad)
    • WebIndexPlugin - Possibility to shape how bundles are emitted (#1144) (f1ac7d5)
    Source code(tar.gz)
    Source code(zip)
  • v3.1.3(Feb 7, 2018)

  • v3.1.2(Feb 7, 2018)

  • v3.1.1(Feb 6, 2018)

  • v3.1.0(Feb 5, 2018)

    Features

    Bug Fixes

    • Some modules cannot be imported because this !== module.exports (#1030) (#1032) (4400985)
    • allowSyntheticDefaultImports is broken (#1063) (a7ed207)
    • Corrects updates for HMR updates by pointing to the correct map file (#1037) (e299205)
    • CSS grouping must use require on explicit user package (#1019) (625c2d9)
    • CSSDependencyExtractor undefined path check (e4c2096)
    • CSSModules fails to retrieve data from cache (#1008) (fee5386)
    • CSSResourcePlugin breaks source maps (#1058) (ddb70eb)
    • CSSResourcePlugin crashes with "TypeError: Cannot read property 'startsWith' of undefined" (edda590), closes #1084
    • definition of TSC options (#1065) (4529845)
    • Duplicate slashes cause quantum to fail when resolving modules (f45bf5a), closes #1007
    • Electron environment polyfills fs and other server modules (57add76)
    • EnvPlugin doesn't work with target server on development (fixes #1033) (9711567)
    • Fix #1030 (this !== module.exports) for Quantum (#1036) (b1c3f1e)
    • Fix a type in Bundle runner (#1051) (95a1eb0)
    • Fix PostCSSPlugin warning and make it emit sourcemaps (d03a392)
    • Fixes paths on windows (#1059) (9ee5e86)
    • ImageBase64Plugin spits an error when cache is OFF (#1034) (89c7958)
    • Maximum call stack when importing with LESS (#1023) (cf55c4c)
    • Quantum is running only once, ignoring watch option (f4d8f5f)
    • Quantum treeshaking respect double imports of the same file (#1064) (3dfcb1a)
    • RawPlugin respects CSS dependencies for HMR (#1020) (4f4e367)
    • replaced concat-with-sourcemaps to a fixed version (f1cad3f)
    • replaces require variable without arguments (#1047) (7254820)
    • Target electron must include events polyfill (#1038) (83f0058)
    • tsc function fix on windows (#1061) (c7a7982)
    • Typeof null in syntheticDefaultExportPolyfill (610efbb)
    • WebIndex does not update the bundle hashes on watch mode (9cce9f3), closes #1013
    Source code(tar.gz)
    Source code(zip)
  • 3.0.2(Jan 5, 2018)

    Features

    • Ability to publish typescript sources to npm (91b3a28)
    • add appendBundles-option to WebIndex-plugin (#942) (3668e7a)
    • Add fuse helper to Sparky (8315595)
    • Add support for adding prefetch and preload tags. (#987) (567f0d8)
    • Added a rename function and some documentation (#957) (62a2bae)
    • Added npmPublish, bumpVersion for Sparky (82f553d)
    • Added Sparky.exec (ae02e49)
    • Adding default sparky context value (d5ba1e1)
    • allow CSS mask images to be processed with PostCSSResourcePlugin (#925) (1f1941d)
    • Allow to set root option on postcss-modules (#985) (b92de87)
    • An ability to create context in Sparky (#962) (afca694)
    • Ensure Quantum target matches FuseBox.init target (#953) (a65ee45)
    • EnsureEs5 false in Quantum (44a099c)
    • Generate tsconfig.json if not found with default values (#952) (53a24e7)
    • Introducing Quantum noConflictApi option (e819318), closes #947 #914
    • PostCSS added support for .pcss extension (#972) (9e4df9b)
    • Responsive target should affect tsconfig and Quantum uglify target (#946) (3fb7176)
    • sendPageReload and sendPageHMR from fuse.js (#921) (6635a10)
    • Smart code splitting (3b5ba2e), closes #895
    • Smart Code Splitting respect splitConfig option (55bc66b)
    • Support HMR of files included through CSS Modules @value (#999) (55cfe54)

    Bug Fixes

    • Aliasing goes wrong with package.json in folder (#992) (0bb44d9)
    • add type to FuseBoxOptions.package (#951) (f53bbff)
    • Aliases broke Source Maps (#978) (ea79910)
    • BundleProducer overrides NODE_ENV to production (#950) (39fc7f8)
    • Bust css cached with PostCSSPlugin (#965) (95b9edd)
    • Code spliting file integrity tests (3362861)
    • CSSResourcePlugin should not rewrite absolute urls (#975) (fcf4f17)
    • Ensure .babelrc options and direct BabelPlugin options are merged together (#920) (7aa77f8)
    • Fix aliases in dynamic import statement (9242649), closes #943
    • Fixed Issue with cached tsconfig language level (efa3ffe)
    • Fixes Quantum splitting but when resources have many dependents (b181121), closes #949
    • Fixing QuantumBit module movement mechanism (a528c9b)
    • Fixing Sparky fuse context (49bd656)
    • Incorrect dynamic module resolution (#982) (2160073)
    • Issue with npm module dependencies being pulled into shared reference (#955) (1aa514c)
    • LanguageLevel doesn't detect es2015 "const", "let" and "arrow function" (#917) (145912c)
    • Modules are not moved to split bundles even the belong there (eb9d36c)
    • Printing fuse version is moved to FuseBox.init (#1000) (c61551e)
    • Quantum crashed with undefined conditions on the plugin list (3ef03fa), closes #939
    • Quantum Splitting and node_modules (a093cad)
    • QuantumBit fixing circular dependency issue (3ab0651)
    • related to package.json main directive (#992) (071dc57)
    • ScriptTarget ES-edition to ES-year aliases (#990) (#1001) (cba2bec)
    • Sparky combined tasks and new colours (51cf154)
    • Sparky failed to copy sub directories (7fb285d)
    • sparky: Update watch flow to use user base path (#996) (7a878ee)
    • Sparky log (48fcf12)
    • Sparky shortcut functions lose context (9b29153)
    • tsc added to Sparky export (31e62c0)
    Source code(tar.gz)
    Source code(zip)
  • v2.4.0(Oct 26, 2017)

    • Accepts only strings for sourceMaps (#860) (65e110f)
    • Check for frozen object in polyfillNonStandardDefaultUsage (#850) (6137026)
    • css plugin doesnt check type before calling generateCorrectSourceMap (#897) (2969f66)
    • Ensure correct path names for last changed file in bundle for VueComponentPlugin (#878) (c67cffe)
    • Ensures typescript plugin is used when vue lang="ts" (#861) (0716e63)
    • Fixes code splitting issue when Quantum doesn't take path resolver (#867) (942e599)
    • Only inject HMR code at end of bundle if a vue file has been processed (#858) (1b68718)
    • WebWorker now works with VanillaAPI (#869) (e40ec64)

    Features

    • Add CLI API functionality (#892) (fcd30fb)
    • Allow path overrides configuration (05a47fb)
    • Allow typescript decorators for vue components (#870) (18f783e)
    • Extended Server require with import statements on remote files (#883) (12dfc01), closes #871
    • object-rest-spread acorn parser extension (#864) (3c7d18e)
    • shimsPath customisation in Quantum (50124ad)
    • StylusPlugin and CSSDependencyExtractor + Cache (#857) (fd024b2)
    • Uglify-es support for quantum (#884) (7add661)
    • WebIndexPlugin now accepts a template as a string literal (#886) (2792c1d)
    Source code(tar.gz)
    Source code(zip)
  • v2.3.3(Oct 5, 2017)

  • v2.3.2(Oct 4, 2017)

  • v2.3.1(Oct 4, 2017)

  • v2.2.31(Sep 5, 2017)

  • v2.2.3(Sep 4, 2017)

    • HMR CSS update. CSS dependency extractor
    • useTypescriptCompiler option to use typescript for javascript projects
    • Tree shaking removes file which have cross references in entry point (Big success)
    • Fixed es6 detection and automatic transpiling
    • useJsNext accepts a string library names that should use js:next or module property from package.json
    • polyfillNonStandardDefaultUsage a solution to heresy default imports where a package doesn't have a default export
    • Fixed cache related issue when a file is imported using typescript
    • WebIndex bug fixes
    • Browser Overrides fixes. Fix an issue with relative paths pointing to browser field.
    Source code(tar.gz)
    Source code(zip)
  • v2.2.2(Aug 16, 2017)

    • removeExportsInterop is set to false by default (way to many complaints)
    • useJsNext option is introduced
    • Fixed a bug related to async css loading
    • Proxy option for the development server
    • HMR + CSS has got a significant improvement. Only one file is reloaded at a time
    • An ability to HMR hosted CSS files (Oh yeah)
    • Quantum target "electron"
    • FuseBox.target is replaced by Quantum accordingly
    • Fixed browser fields. It complies to the spec it reads files from the package's home directory
    • Fixed bug with completed() and sourceMaps (it was evaluating a wrong file)
    • Added target : "npm" for Quantum builds
    • Replacement typeof module in Quantum now considers the local scope
    • Critical issue related to file resolving fixed. (auth0-lock lib)
    Source code(tar.gz)
    Source code(zip)
  • v2.2.1(Jul 21, 2017)

    This release makes Quantum Bundling stable. Most of the known issues (at the time of the release) are fixed.

    • Cache breaker. Finally. Every time you change your fuse.js cache will be cleared automatically
    • writebundles option. Allows you to make in-memory builds
    • Open option for development server (Opens up a default browser with the current URL)
    • target : server in Vanilla options doesn't auto import process and other polyfills required by browser
    • Extra functionality to source maps. Now you can host them
    • Fixed Quantum critical issue related to path resolving. (Fixed bundling auth0)
    • Browser global is pointing to the document locally (in the context of a bundle)
    • process.env is now merged with the Quantum env, and being replaced accordingly in the code
    • Fixing Quantum critical bug, where analysis weren't performed on the Object.defineProperty(exports)
    • Fixed Quantum server builds and require node_modules
    • Quantum now respects completed() (Previously it was triggered when Vanilla was done)
    • Fixed a critical bug in require statements, where a statement doesn't have any arguments
    • process polyfill is removed in Quantum by default (the option is moved to config)
    • Tree shaking now de-references files (To remove more files)
    • process.env conditions are replaced without uglify-js

    If process.env.foo is 'eh'

    if ( process.env.foo == "bar" ) {
       console.log("True")
    } else {
         console.log("false")
    }
    

    The resulting code will not have the if statement and will look like:

         console.log("false")
    
    • process.env now understands EnvPlugin and values are replaced accordingly (along with conditional evaluation)
    • FuseBox.isServer and FuseBox.isBrowser now behaive exactly the same as process.env. Meaning that the corresponding blocks will be replaced for the server and browser targets
    Source code(tar.gz)
    Source code(zip)
  • v2.2.0(Jul 3, 2017)

    New import()

    In compliance with the upcoming es6 proposal-dynamic-import and Typescript 2.4 dynamic imports we added this functionality.

    With the new import() support you can do the following:

    • import json
    • import CSS
    • import ANY other extension (give strings)
    • import javascript file (+commonjs)
    • import split bundles (WITHOUT "magical" comments)

    And it works on server and in browser! Example:

    import("./main.css")
    await import("./external.js")
    await import("./config.json")
    // bundle name "about"
    await import("about")
    
    // bundle name "about"
    // automatically mapped to bundle "about" (no comments required)
    await import("./components/about/AboutComponent")
    
    

    And yes, it works with Quantum and has a nice test coverage

    Check this out

    npm install
    node fuse dist
    

    Browser target

    Browser target for the Vanilla API got a major improvement. It handles it not just for the entry points, but also across an entire module. It will display a warning and notify users about possible problems if the latter is not set.

    screenshot 2017-06-20 21 06 00

    Quantum improvements

    Quantum has a massive upgrade too.

    • ContainedAPI for publishing a single bundle to CDN or NPM
    • Lego-API has been improved. It contains so much more features and adjusts to your needs automatically.
    • Improved stability and compatibility with Windows OS.
    • Generating manifest files
    • Various improvements and bug fixes (lots of them)

    Require Statement Hoisting

    It will be possible to enable hoisting with Quantum. Many repetitive require statements gets hoisted when built with Quantum

    Promise polyfills with Quantum

    Quantum has polyfills property that accepts a list of desired polyfills to be included

    QuantumPlugin({
        polyfills : ["Promise"]
    })
    

    Tree shaking upgrade

    Quantum now evaluates process.env.NODE_ENV if statements! And removes unused files!

    screenshot 2017-06-28 16 43 59

    Various contributing

    Thanks a million for everyone who contributed to this awesome release. You can find closed issue in the milestone

    Source code(tar.gz)
    Source code(zip)
  • v1.3.119(Feb 21, 2017)

Next-generation ES module bundler

Rollup Overview Rollup is a module bundler for JavaScript which compiles small pieces of code into something larger and more complex, such as a librar

Rollup 22.7k Jan 4, 2023
A blazing fast js bundler/loader with a comprehensive API :fire:

A bundler that does it right FuseBox on slack FUSEBOX v4 is out! Install: npm install fuse-box --save-dev import { fusebox } from 'fuse-box'; fusebox

null 4k Jan 7, 2023
xaboy 4.6k Jan 3, 2023
πŸ“¦πŸš€ Blazing fast, zero configuration web application bundler

Features ?? Blazing fast bundle times - multicore compilation, and a filesystem cache for fast rebuilds even after a restart. ?? Out of the box suppor

Parcel 41.8k Jan 4, 2023
πŸ“¦πŸš€ Blazing fast, zero configuration web application bundler

Features ?? Blazing fast bundle times - multicore compilation, and a filesystem cache for fast rebuilds even after a restart. ?? Out of the box suppor

Parcel 41.8k Jan 4, 2023
πŸ”₯ Blazing Fast API which scrapes Mydramalist.com made using Fastify and Cheerio.

mydramalist API ?? Blazing Fast API which scrapes Mydramalist.com made using Fastify and Cheerio. Setup pnpm install node index.js available at http:/

Paranjay Singh 6 Dec 4, 2022
:fire: An extremely fast, React-like JavaScript library for building modern user interfaces

Inferno is an insanely fast, React-like library for building high-performance user interfaces on both the client and server. Description The main obje

Inferno 15.6k Dec 31, 2022
:fire: An extremely fast, React-like JavaScript library for building modern user interfaces

Inferno is an insanely fast, React-like library for building high-performance user interfaces on both the client and server. Description The main obje

Inferno 15.6k Jan 3, 2023
A blazing fast React alternative, compatible with IE8 and React 16.

Nerv is a virtual-dom based JavaScript (TypeScript) library with identical React 16 API, which offers much higher performance, tinier package size and

null 5.4k Jan 4, 2023
Create blazing fast multithreaded Web Apps

Welcome to neo.mjs! neo.mjs enables you to create scalable & high performant Apps using more than just one CPU, without the need to take care of a wor

neo.mjs 2.4k Dec 31, 2022
Build blazing fast, modern apps and websites with React

Gatsby v3 βš›οΈ ?? ?? Fast in every way that matters Gatsby is a free and open source framework based on React that helps developers build blazing fast w

Gatsby 54k Jan 9, 2023
Build blazing fast, modern apps and websites with React

Gatsby v3 βš›οΈ ?? ?? Fast in every way that matters Gatsby is a free and open source framework based on React that helps developers build blazing fast w

Gatsby 54k Jan 1, 2023
Blazing fast Apple TV application development using pure JavaScript

atvjs Blazing fast Apple TV application development using pure JavaScript. Philosophy What's included Getting Started Basic Examples Creating Pages Ad

Emad Alam 292 Dec 14, 2022
Blazing Fast JavaScript Raster Processing Engine

Geoblaze A blazing fast javascript raster processing engine Geoblaze is a geospatial raster processing engine written purely in javascript. Powered by

GeoTIFF 125 Dec 20, 2022
Simple to use, blazing fast and thoroughly tested WebSocket client and server for Node.js

ws: a Node.js WebSocket library ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and server implementation. Passes the quit

WebSockets 19.2k Jan 4, 2023
Gatsby-blog-cosmicjs - πŸš€βš‘οΈ Blazing fast blog built with Gatsby and the Cosmic Headless CMS πŸ”₯

Gatsby + Cosmic This repo contains an example blog website that is built with Gatsby, and Cosmic. See live demo hosted on Netlify Uses the Cosmic Gats

Priya Chakraborty 0 Jan 29, 2022
⚑ A blazing fast, lightweight, and open source comment system for your static website, blogs powered by Supabase

SupaComments ⚑ A blazing fast, lightweight, and open source comment system for your static website, blogs ?? Demo You can visit the Below demo blog po

MC Naveen 112 Dec 27, 2022
πŸš€ Blazing Fast S3 Powered CDN ✨ Powered By Fastify, S3 Buckets & Docker!

?? WasiCDN Blazing Fast S3 Powered CDN, Powered By Fastify, S3 Compatible Buckets & Docker! Core DockerHub: https://hub.docker.com/r/maximking19/wasic

Maxim 5 Aug 31, 2022
Thin Backend is a Blazing Fast, Universal Web App Backend for Making Realtime Single Page Apps

Website | Documentation About Thin Thin Backend is a blazing fast, universal web app backend for making realtime single page apps. Instead of manually

digitally induced GmbH 1.1k Dec 25, 2022