Libraries in BladeRunnerJS, like those in other web applications, can contain the definition of useful functionality, UI components or services.
There are two types of library - BRJS conformant libraries (libraries that BRJS presently understands "out of the box") and third-party libraries. Both types of libraries contain configuration in order to identify to BRJS which type they are.
Note: In the future we hope to provide "out of the box" support for other types of libraries that have been drawn down from popular package management repositories such as npm and bower. Right now, you can use these, but you need to put in a little bit of work in order to achieve this.
For information on how to create or edit libraries, see How to Use Libraries.
Library Structure
The two types of library differ in how they are structured. BRJS libraries conform to the same structure as a blade whereas the structure of a third-party library can vary considerably.
BRJS conformant Libraries
BRJS libraries will contain the following files and directories:
src
- which contains all JavaScript source filestests
- which contains the tests and test assetsresources
- for HTML, CSS and other resourcesbr-lib.conf
- the configuration file for the library
The library configuration file, br-lib.conf
, is a YAML file that is used to configure properties on the library. An example of this configuration is below.
requirePrefix: myLibrary
requirePrefix
defines the require prefix for all source files and assets contained within the library. Much like where a Blade must have a defined prefix, libraries have a defined prefix too. The default value forrequirePrefix
is the name of the library itself.
ThirdParty Libraries
Thirdparty libraries are intended for libraries that don't have any structure to the contained source files and assets. For example 'jQuery' and 'Twitter Bootstrap' are both libraries that are well suited to be a Thirdparty Library as they both don't have any defined structure and are simply a directory of files.
Thirdparty libraries can contain any file type, such as .js
, images, .html
and .css
, in any structure you like. These libraries must contain a thirdparty-lib.manifest
YAML file which BRJS uses to define how to handle the assets within the library. An example of this configuration is below.
depends: someOtherLibrary
js: js/*.js
css: css/*.js
exports: myLibrary
commonjsDefinition: true
depends
allows a third-party library to depend on another library (including BRJS conformant libraries). For example, if a 'twitterbootstrap' had a dependeny on a 'jquery' library you could use thedepends
configuration. This option is needed to explicitly define dependencies since, unlike other types of source code, BRJS cannot infer depencies for Thirdparty libraries since the structure of the source code is unknown.js
andcss
configure the JavaScript and CSS files that should be bundled when this library is used. By default all.js
and.css
files in the root of the library directory are bundled. The option can support limited wildcards, for examplesrc/*.js
and**/*.js
to bundle all '.js' files in the 'src' directory and all 'js' files in all directories and sub-directories respectively.exports
defines the name of the object that this library 'exports'. In order for the BRJS module system to work with this type of library each library must define the JavaScript reference that it exports. For example 'jQuery' is written to define 'jQuery' on the window object (e.gwindow.jQuery = ...
) so the value ofexports
would be 'jQuery'. The value ofexports
is not always the same as the name of the library. For example 'knockout' defines 'ko' on the window object, so the value ofexports
would be 'ko'. If the library does not need to export anything (for example, it is solely used for css) then you can export an empty object. This is specified by settingexports
to"{}"
(note the"
s which are needed to define a literal{}
).commonjsDefinition
defines whether or not this library should be treated as a CommonJS library. This causes the library to be wrapped in adefine
block, preventing it from defining itself onwindow
.
Where Next?
To find out how to create new libraries and use existing libraries, go to Using Libraries.