A17 FE Boilerplate
Introduction
The rebuild of A17 FE Boilerplate.
Highly inspired by kcd-scripts and react-scripts
Installation
No more clone. It is an npm package : https://www.npmjs.com/package/@area17/a17-boilerplate
Via a17-generator
Please see instructions here a17-generator.
Manual install
Go to the project root, and run:
$ npm install @area17/a17-boilerplate
After the package is installed please run:
$ npx a17-bp init
Tasks
All available tasks are listed in package.json
file as npm tasks and are documented in the Wiki
Supported Browsers
Boilerplate runs mustard test in the head of the document to test for basic browser abilities to determine if the browser is modern or not (see head.js). Modern browsers are currently considered to be:
- IE11+
- Safari 10+
- Edge 12+
- Chrome 24+
- FF 29+
Older browsers will have their JavaScript execution halted and load a fall back HTML4CSS
NB IE11 support will likely be dropped in 2019 with a stricter mustard test.
Currently planned updates
Currently in no particular order, a list of items currently being discussed/planned.
Boilerplate specific
- JavaScript evolution:
- remove IE11 support Q3 2019
- SCSS evolution:
- deprecate grid float methods
- add CSS grid methods
- define and document nomenclature of components
- Compilation tasks:
- add critical CSS method
- purge/purify CSS to remove unused styles
- modern build (ES2015+ build and ES5 with polyfills)
- Documentation
- dev dependency/dependency - update docs to talk about diff
- Shared 500 pages
- Public release
- edit documentation, fix gaps
Broader A17 FE
- Integration with BE:
- refine faker powered static workflow
- refine FE block repeater
- image helpers from AIC
- Design to FE workflow
- refine process
- edit documentation
- assess Figma API for tighter integration
- Toolkit
- asses bitsrc, patternlab, storylab etc.
- consider extending Twill guides
Update Log
6.1.5
- BrowserSync config : use env DEV_URL as proxy if exist
6.1.4
- Custom BrowserSync config set in project will replace the default config
6.1.3
- Documentation updates. And re-added
id="content"
to the <main>
element in the sample.html
.
6.1.2
6.1.1
6.1.0
- added
manageBehaviors
and createBehavior
with updated dummyBehavior
- moved required polyfills to an included file
manageBehaviors
has been migrated to Boilerplate as it was too specific to our method of triggering functions linked to DOM nodes. This version has been updated to use a MutationObserver
. Its compatible with existing Boilerplate behaviors (which include a this.init
and this.destroy
).
createBehavior
is new - a new way to create behaviors. Using the this to make your behaviors will give your behavior a few niceties built in:
- access to options set on the container node via
this.options
- access to helper functions to
getChild
and getChildren
of the container node - automatic purging of variables on destroy
- media query scoping, using lifecycle functions
enabled
and disabled
- lifecycle functions for debounced
resized
and mediaQueryUpdated
for custom actions on those events
See dummyBehavior.js
and <div data-behavior="dummyBehavior">
in sample.html
to poke through how to make a new behavior using createBehavior
6.0.4
- Removed touch class test from head.js
6.0.3
- Adding
CustomEvent
polyfill to app.js as corresponding helper is going to be deprecated
6.0.2
6.0.1
6.0.0
Breaking change
There are the following tasks only now.
- icons : generate icon sprite
- bundle : webpack
- rev : revision assets
- dev : perform 'icons' then 'watch'
- watch : bundle in watch mode and watch for icon change
- build : 'icons' then 'bundle' then 'rev'
This update bring numerous changes :
- No more "styles" or "scripts" tasks : those tasks have been replaced by a task named "bundle"
- No more "clean" task : this is done in the main "bundle" task
- No more "fonts" and "images" tasks to copy the images folder and the fonts folder : this is done in the main "bundle" task
- Style is compiled using webpack with the dart-sass implementation
- Webpack config can be tweak in the project itself (by creating the following files : webpack.dev.js / webpack.prod.js / webpack.all.js at the root of the project)
- BrowserSync is now performed using the webpack BrowserSync plugin : you can easily override the default config by using a custom config in a project webpack.bs.js file).
The watch task has been simplified.
This is only watching for SVG to re-create the icon sprite.
This create quite some changes in the final dist folder :
CSS and JS are now created at the root of the dist folder.
One important limitation from Webpack : CSS and JS can't have the same name (ie : app.css and app.js are prohibited).
The rev-manifest.json is still created so Laravel can still use it.
5.0.5
- removing uneeded console.log polyfill
- adding NodeList forEach polyfill (corresponding helper is going to be deprecated)
- adding supported browser notes to readme
5.0.4
- headjs updates:
- update mustard test to reflect current SOWs
- conditionally include picturefill via feature detection as only IE11 needs it
- removed touch device testing (bad practice)
5.0.3
- Update dependencies (Webpack and Babel)
5.0.2
5.0.1
- New manifest.json updates to pass through ports to BrowserSync:
{
"config": {
"browsersyncPort": 1312,
"browsersyncUiPort": 1313
}
}
5.0.0
- Added new type styles handing with baseline-baseline fixing and margin functions to space baseline-baseline. See ttps://codepen.io/13twelve/pen/WYgrYE?editors=1000
4.1.2
- Update Webpack to latest version and remove hardcoded 'frontend' folder in watch task. (There are still some hardcoded 'frontend' to be removed)
4.1.1
-
Updated breakpoint
mixin to help generate IE11 and hover based breakpoints
@include breakpoint('medium+') {
}
@include breakpoint(null,'hover') {
}
@include breakpoint(null,'ie11') {
}
@include breakpoint('medium+','hover') {
}
@include breakpoint('medium+','ie11') {
}
4.1.0
-
Add a way to specify custom entry points in the webpack config via the manifest :
"scripts": {
"app.js": "js/app.js",
"map.js": "js/map.js",
"head.js": "js/head.js"
}
If no "scripts" are found it will fallback on the js/app.js and the js/head.js file.
4.0.1
- Update node-sass so this support Node v11
4.0.0
- Webpack 4 is now used to generate JS
3.2.1
- Rev asset task: add a way to pass files into rev task (in addition to default .css and .js files)
3.2.0
- Update Babel version to 7.x.x.
3.1.1
3.1
3.0.3
- Fix a manifest file path bug.
3.0.2
- Prevent svgo from removing viewBox attribute from svgs.
3.0.1
- Exclude a17-helpers package from being compiled by babel (needs to install latest a17-helpers package which is compiled already).
3.0.0-rc.7
- Remove babel-polyfill from app.js by default
3.0.0-rc.6
3.0.0-rc.5
- Scripts and Watch tasks must be plugged to the dist folder config via the manifest
- Fonts and Images tasks : empty the folder before copying
- Remove unused packages
3.0.0-rc.4
- Update icon task so ids of the svg symbols are prefixed with
icon--
.
3.0.0-rc.3
-
Add non-frontend file watch support. In manifest.json
, just add bs
options to config
like the following example (it is using relative path to the root of frontend
folder):
{
"config": {
"bs" : {
"watchExtra" : [
"./*.php"
]
}
}
}
3.0.0-rc.2
- Fix warning in Sass, typography mixin : "&&" means two copies of the parent selector. You probably want to use "and" instead.
3.0.0-rc.1
- Safely update packages
- Watch images
3.0.0-beta.8
-
Clean dist folder before doing a build
-
Add the rev task : a rev-manifest.json file will be added at the root of the dist folder to map assets with revisioned ones
-
In dev the rev-manifest.json will look like this npm run build
:
{
"styles/app.css":"styles/app.css",
"styles/html4css.css":"styles/html4css.css",
"scripts/app.js":"scripts/app.js",
"scripts/head.js":"scripts/head.js"
}
-
In production npm run prod
:
{
"styles/app.css":"styles/app-7ad77318e2.css",
"styles/html4css.css":"styles/html4css-894eb0106a.css",
"scripts/app.js":"scripts/app-e82b5c7421.js",
"scripts/head.js":"scripts/head-b39adeb404.js"
}
3.0.0-beta.7
3.0.0-beta.6
- Refactor icon task so it is only using svg-store and svgo (it remove the phantomjs dependency)
3.0.0-beta.5
3.0.0-beta.4
- Use Webpack to watch scripts (other files are still watchting via package watch)
3.0.0-beta.3
- Add icon watch and revise some readme info.
3.0.0-beta.2
- Updated some instructions
3.0.0-beta.1
Publish
For publishing to npm, please see this guide.