layout |
---|
doc-page.html |
The build infrastructure consists of a few tools made available through npm run
commands.
This document is concerned with building the JavaScript source code. See Documentation Infrastructure for how the documentation and website are generated.
:::note
If this is your first contact with ally.js, make sure to run npm run init
after cloning the repository. This will run npm install
, npm run clean
, npm run build
and npm run build:website
to make sure your local copy is ready.
:::
# build everything
npm run build
# remove everything in dist
npm run clean
npm run build
first runs build:pre
to setup the dist
directory, overwriting src/version.js
to expose the package version:
dist
└── src
└── <ES6 files>
npm run build
then runs build:umd
, build:amd
, build:common
, build:esm
and creates the following structure in the dist
directory:
dist
├── <UMD bundle>
├── amd
│ └── <UMD module files>
└── common
│ └── <CommonJS module files>
└── esm
│ └── <ES6 module files compiled to ES5>
└── src
└── <ES6 module files>
npm run build
then runs build:post
after the bundle and modules have been created, mutating the the dist
directory to the following structure (that is published to npm):
dist
├── package.json
├── README.md
├── CHANGELOG.md
├── LICENSE.txt
├── <UMD bundle>
├── <CommonJS module files>
├── amd
│ └── <UMD module files>
└── esm
│ └── <ES6 module files compiled to ES5>
└── src
└── <ES6 module files>
At the end npm run build
also runs build:archive
, which creates a ZIP archive of dist
and saves it to dist/ally.js.zip
.
ally.js is made available in one convenient file, consumable as a browser global (window.ally
), via AMD and CommonJS (exposed in UMD). The source is compiled to the distributable by browserify using babelify and rollupify to resolve the ES6 modules.
# build the UMD bundle
npm run build:umd
# remove everything in dist
npm run clean
To allow developers to use selected features (rather than import everything), the ES6 source (src
) is made available in ES5 via AMD and CommonJS in dist/amd
and dist/common
and as ES6 modules in dist/esm
.
# convert to CommonJS modules
npm run build:common
# convert to AMD modules
npm run build:amd
# keep converting to dist/amd while working on src
npm run watch:amd
# convert to compiled ES6 modules
npm run build:esm
Since v1.4.0
the AMD modules are actually UMD modules, because of how babel 6 handles default exports. Since UMD can be consumed by both AMD and CommonJS system, a separate CommonJS build is not necessary anymore. However, changing the npm module's structure is a breaking change and has thus been deferred to the next major release.
We use eslint with eslint-config-semistandard and a few custom rules to keep the JavaScript sane. The markdown files are kept sane through markdownlint and eslint-plugin-markdown.
# lint everything
npm run lint
# lint only JavaScript
npm run lint:js
# lint only Markdown
npm run lint:md
# lint only JavaScript in Markdown
npm run lint:md:js
# fix linting errors
npm run lint:js:fix
Linting is done automatically during git commit
by way of pre-commit and limited to the actually changed files by way of lint-staged in order to keep git commit
as fast as possible.