UNPKG

@area17/a17-boilerplate

Version:

The official AREA 17 boilerplate

372 lines (274 loc) 12.1 kB
# A17 FE Boilerplate * Wiki [https://code.area17.com/a17/fe-boilerplate/wikis/home](https://code.area17.com/a17/fe-boilerplate/wikis/home) * Issues [https://code.area17.com/a17/fe-boilerplate/issues](https://code.area17.com/a17/fe-boilerplate/issues) ## Introduction Instead of opinionated predesigned components, like those provided in Bootstrap and Zurb Foundation, A17 Boilerplate provides a structure and set of ideas to allow quick and consistent set up of a project. It aims to take away the boring set up of "what folder structure do I use?", "how will I generate my CSS?" and "what grid system will I use?" by providing those things out of the box. But, crucially, it then leaves the fun bit of writing the site styles up to you. ## Installation Via npm: [https://www.npmjs.com/package/@area17/a17-boilerplate](https://www.npmjs.com/package/@area17/a17-boilerplate) ### Via a17-generator Please see instructions here [a17-generator](https://www.npmjs.com/package/@area17/a17-generator). ### Manual install Go to the project root, and run: ```shell $ npm install @area17/a17-boilerplate ``` After the package is installed please run: ```shell $ npx a17-bp init ``` ## Tasks All available tasks are listed in `package.json` file as npm tasks and are documented in the [Wiki](https://code.area17.com/a17/fe-boilerplate/wikis/home) ## Supported Browsers Boilerplate runs [mustard test](http://responsivenews.co.uk/post/18948466399/cutting-the-mustard) in the head of the document to test for basic browser abilities to determine if the browser is modern or not (see [head.js](https://code.area17.com/a17/fe-boilerplate/blob/master/core_files/js/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](https://github.com/area17/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.2.8** * Updated webpack config to enable overriding of the optimization setting **6.2.7** * Import unit mixins. **6.2.6** * Sass deprecation warning : @elseif is deprecated and will not be supported in future Sass versions. Use "@else if" instead. **6.2.5** * Including `dotenv` to correctly read `.env` vars **6.2.4** * A17 Helpers version update **6.2.3** * pixel font sizes are converted to rems - no change to how we spec typography, just on how the CSS presents the numbers **6.2.2** * User Terser instead of Uglify for JS minification. See why : https://github.com/webpack-contrib/uglifyjs-webpack-plugin/blob/master/CHANGELOG.md#breaking-changes **6.2.1** * Fix wrong path resolution to default manifest import **6.2.0** * Updated merge between default manifest and custom manifest. At the end, we don't to test if a key from manifest exist inside webpack configuration. * Fixed console outputs. Now we can see infos from webpack in build mode. * Added verbose mode: We can configure stats mode from webpack by adding verbose argument in the command npm run build --verbosemode. Webpack will output everything from him and plugins. * Added default alias @ to frontend.source from manifest.json. We can use this alias inside to import files inside .js or .scss **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** * Update documentation **6.1.1** * Update dependencies **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** * Update documentation **6.0.1** * Update documentation **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 * IE11+, Safari 10+, Edge, recent Chrome, recent FF https://caniuse.com/#compare=ie+10,ie+11,safari+9,safari+10.1&compare_cats=JS,JS%20API * 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** * Update dependencies **5.0.1** * New manifest.json updates to pass through ports to BrowserSync: ```json { "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 ```scss @include breakpoint('medium+') { // styles to be given to browsers at `medium` and above } @include breakpoint(null,'hover') { // styles to be given to devices with mouse pointers } @include breakpoint(null,'ie11') { // styles to be given to be given to IE11 } @include breakpoint('medium+','hover') { // styles to be given to browsers at `medium` and above that have mouse pointers } @include breakpoint('medium+','ie11') { // styles to be given to ie11 at `medium` and above } ``` **4.1.0** * Add a way to specify custom entry points in the webpack config via the manifest : ```json "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** * Update dependencies. **3.1** * Update dependencies. **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** * Webpack config update **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): ```json { "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` : ```json { "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` : ```json { "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** * Add script source map **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** * Add sass source map **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** * The bp 3.0 #### Publish For publishing to npm, please see [this](https://docs.npmjs.com/getting-started/publishing-npm-packages) guide.