Giter VIP home page Giter VIP logo

bundledom's Introduction

bundledom -- bundle assets of an html document

New in version 3: uses rollup for bundling, and still supports old-style bundling. New in version 4: resolve native relative imports, better async/await support.

Features

  • recursively concatenate scripts, styles, and link[rel=import]
  • minify scripts and stylesheets
  • vendor autoprefixing of stylesheets, configurable through env, see browserslist
  • bundle everything in one single js file, or split in js / css.
  • prepend or append additional scripts, styles, or imports
  • exclude or ignore a tag by matching a url substring new in version 1.8.0: or a minimatch pattern with wildcard (see example below)
  • modify the DOM and outputs html
  • downloads remote scripts or stylesheets with whitelist (new in 1.7.0)
  • allows custom asynchronous DOM modifications (new in 1.6.0)
  • any kind of modules are supported, thanks to rollup
  • relative imports can be resolved using modules option.

Install

npm install -g bundledom

Usage

This saves modified html file, and styles are bundled into js file:

bundledom
--html bundles/index.html
--js /bundles/index.js
-x jquery.js -x moment.js -i index.js
--prepend '/js/custom-elements.js'
public/index.html

This saves styles separately:

bundledom
--html bundles/index.html
--css /bundles/index.css
--js /bundles/index.js
--exclude jquery.js
--prepend '/js/custom-elements.js'
public/index.html

This does not compress files, and specifies root dir

bundledom
--concatenate
--html bundles/index.html
--css /bundles/index.css
--js /bundles/index.js
--exclude jquery.js
--prepend '/js/custom-elements.js'
--root public
public/templates/index.html

A tool to bundle a bunch of files:

bundledom-all
  --filter "**/excluded-*.*"
  --common common.html
  --suffix 1.0.0
  "templates/*.html"

it bundles common files then processes all files matching pattern and put everything with suffixes in a bundles/ directory.

See bundledom-all -h for more command-line options.

Paths are relative to the input file path.

API

bundledom(path, opts, cb)

where path is the path of the html file to process, and opts has these properties:

  • exclude: array of matched strings
  • ignore: array of matched strings
  • append: array of strings
  • prepend: array of strings
  • js: path relative to html file
  • css: path relative to html file
  • html: path relative to root
  • root: absolute mount path, defaults to current directory
  • custom: function(dom, opts, data) {} returning a promise
  • remotes: list of allowed remote domains to download from
  • modules: the mount path for resolving node_modules (/modules/xxx becomes node_modules/xxx/index.js)

Strings are matched simply by searching a substring.

Tags without src or href attributes can be excluded or ignored by passing a dot ".", otherwise they are bundled.

Omitting js, css options skips the insertion of the corresponding tag in the html document.

If cb is omitted, returns a promise.

Returns an object with following properties:

  • js, css, html: the resulting js, css, html
  • scripts, stylesheets, imports: the lists of processed files

Help

bundledom --help

License

MIT, see LICENSE file.

bundledom's People

Contributors

kapouer avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

bundledom's Issues

document this makefile

project := $(shell node -p "require('./package').name")
version := $(shell node -p "require('./package').version")
bundledom = $(shell node -p 'require.resolve("bundledom/bin/bundledom")')

htmlFiles = $(patsubst public/%.html,public/bundles/%.html, $(shell fgrep -sl "<html" public/*.html | tr '\n' ' '))

bundleDir = public/bundles

bundle: clean $(htmlFiles)

clean:
	rm -f public/bundles/*

public/bundles/%.html: public/%.html
	file=`basename $<` \
	name="$${file%.*}" \
	$(bundledom) --root . \
		--exclude public/assets/css/jquery-ui.min.css \
		--exclude public/assets/css/bootstrap.min.css \
		--exclude public/assets/js/jquery.min.js \
		--html $@ \
		--js $(bundleDir)/$*-$(version).js \
		--css $(bundleDir)/$*-$(version).css \
		$<

Bug when including .js file in an import

Bundling an import which loads a js file produces incorrect js that crashes on the client. Maybe this is related to issue #5. The .js file concerned is tab.js from semantic-ui.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.