New to LMD? See Getting Started, Wiki and examples
- Modules are CommonJS
- Actually LMD can work with any JavaScript modules
- There is no define wrapper!
- You can use node modules without dirty hacks like
typeof exports ? :
- You can use strings as string without any "template" plugins
- You can use JSON file as Object
- Total and honest isolation
- LMD package is fully-zero-isolated from globals (globals cant access LMD-pacakge, but LMD can)
- Modules are isolated from LMD and from each module
- Modules can be sandboxed (3-party modules, can exports only)
- Plugins are isolated from LMD and from each module
- Lazy interpretation and load
- LMD can load off-package modules (all loaders can do it =)
- It can interpret(eval) modules when they are required
- List of depends are located in separate .json file
- Well... list of 2 deps in file are ok, but 5+ are headache
- Module is isolated from file system
- You have to edit only 1 file if module path changes
- Possible to use dynamic require()
- Config inheritance
- Easy to setup development, testing and production builds
- Build watcher
- Watcher detects changes in your files and performs rebuild
- Flexible source
- Minimal only 288bytes
- High optimized own code
- LMD builder performs build-time optimisations
- Integrated code-coverage and source analytics tool
- Its easy to enable believe me!
- No extra servers or movements are required for off-package modules Code-Coverage
- Transparent localStorage cache
- Change config and html a bit and voila!
- require() is not overloaded
- Overloaded require is the way to mess in source
- require.css() for css
- require.js() for js (non LMD-modules)
- require.async() for async LMD-modules (objects, strings, modules)
- More
- Can load CSS
- Can work with Node.js and Worker environment
- All builders/loaders stuff
- GUI for LMD (in development)
- Build Analyzer (1-click code coverage, depends, startup perfomance)
- Smart and simple CLI tool
- Default modules are CommonJS
- LMD does not create globals
- LMD is standalone, tiny and flexible (minimal only 288bytes!)
- Each function-module can be initialized/evaled on demand (
lazy: true
) - LMD module is as easy to debug as normal JavaScript file
- Build system compresses JavaScript files using UglifyJs
- LMD module can define object via
return
ormodule.exports
orexports
as CommonJS Module - Module can be wrapped automatically in builder so you can write your modules as node.js modules
- Starting from version 1.5.2 LMD can require off-package modules
"async": true
(see Asynchronous module require) - From version 1.6.0 LMD can cache all in-package modules in localStorage
"cache": true
(see Local Storage cache) - From version 1.6.2 LMD can include off-package css
css: true
and js-filesjs: true
(for jsonp, cross-origin JS or non LMD modules) - LMD package is possible to run as Web Worker or execute as Node.js script (see Web Worker and Node.js)
- LMD works in all modern browsers and in older IE
- LMD can convert non-LMD modules to LMD to use jquery or any other as in-package LMD module (see LMD module form third-party modules)
- LMD can protect your code from 3-party modules (see Modules sandbox)
- Code Coverage? - Easy! (see Code coverage)
- Ready for production -
lmd.js
is 100% covered by unit tests see test/README.md for details - SourceMap for all LMD modules (see Source map)
- Rich CLI interface
npm install lmd -g
global is prefered for LMD CLI comands.
Minimal
{
"root": "../modules/",
"output": "../module.lmd.js", // Path are relative to the root parameter
"modules": {
"*": "*.js" // use wildcards or specify regex string to grep
}
}
See LMD Config for more information
Note
- You can extend config file with another using
"extends": "path/to/file.lmd.json"
parameter - You can also specify module depends by adding
"depends"
options see Modules dependencies
lmd build your_buiild_name
See LMD CLI
Install this grunt plugin next to your project's grunt.js gruntfile with: npm install grunt-lmd
Then add this line to your project's grunt.js
gruntfile:
grunt.loadNpmTasks('grunt-lmd');
See grunt-lmd for details
- glob - you can specify glob pattern (eg
"${name}": "js/*.js"
) to match multiply files. See demo, code - interpolation - you can use templates in your config string values to make your life easier. See demo, code
- sandbox - some of your modules can be in the "sandbox". They cant require, but can provide some resources. See demo, code
- optimize - optimisations of LMD source(not your project files) without minification/packing. See Optimisations section of LMD Plugins overview wiki page. See demo, code
- adaptation - using any JavaScripts as modules. See Wiki page Adopting modules. See demo, code
- bundles - a way to split your application into separete parts. See demo, code
- styles - css builder for you bundles. See demo, code
- lmdjs_configs - you can write config files in JavaScript. See demo, code
- multi_modules - using jQuery or Backbone with plugins? This feature is for you. See demo, code
- ignore_module - ignore module from build, can be used with glob to ignore some modules. See demo, code
- mixins - you can mix your build configs (eg
lmd build index+ru+dev
) to create your special builds. See demo, code - depends - your modules can have own depends. You can notify LMD by adding global "depends" paramenter or specify "depends" for each module. See demo, code
- extends - your configs can inherit other configs (eg development extends production). See demo, code
- testing lmd build with mocha and mocha-phantomjs. See demo, code
- code coverage with istanbul and testing lmd build with mocha and mocha-phantomjs See demo, report, code
Installation lmd completion >> ~/.bashrc
(or ~/.zshrc
). Do not forget to restart shell.
Other ways
- You can add
. <(lmd completion)
to your rc file - Or, maybe:
lmd completion > /usr/local/etc/bash_completion.d/lmd
phantomjs
is required to run test via npm test
see test for details
--
LMD is developing with help of these people
If you like LMD - ★ it via npm star lmd