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 files
- tests- which contains the tests and test assets
- resources- for HTML, CSS and other resources
- br-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
- requirePrefixdefines 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 for- requirePrefixis 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
- dependsallows 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 the- dependsconfiguration. 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.
- jsand- cssconfigure the JavaScript and CSS files that should be bundled when this library is used. By default all- .jsand- .cssfiles in the root of the library directory are bundled. The option can support limited wildcards, for example- src/*.jsand- **/*.jsto bundle all '.js' files in the 'src' directory and all 'js' files in all directories and sub-directories respectively.
- exportsdefines 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.g- window.jQuery = ...) so the value of- exportswould be 'jQuery'. The value of- exportsis not always the same as the name of the library. For example 'knockout' defines 'ko' on the window object, so the value of- exportswould 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 setting- exportsto- "{}"(note the- "s which are needed to define a literal- {}).
- commonjsDefinitiondefines whether or not this library should be treated as a CommonJS library. This causes the library to be wrapped in a- defineblock, preventing it from defining itself on- window.
Where Next?
To find out how to create new libraries and use existing libraries, go to Using Libraries.
