yarn installyarn dev— a watching mode for developmentyarn build— a building not watching mode for productionyarn explore— an interactive mode with a map of bundles for analyzingyarn lint:js— checkjsfiles by eslintyarn lint:scss— checkscssfiles by stylelintyarn format— formatjsandscssfiles
app.scss — base entry point, a place where general styles are included.
I mean styles which are fair for the whole app. That is the default entry point.
❗️Do not rename this file to keep the same base entry point per project ( and it will
cause an error). Accordingly we have default corresponding Drupal library app-styles
which is defined in the draft_starter.libraries.yml and applied in the draft_starter.info.yml.
src/components — the place where every component should live in an appropriate folder.
There are available Atoms, Molecules, Organisms, Templates, Pages folders.
The component folder could consist of
-
js less component example
component-a.scssfile will be the entry point for Webpack├── src ├── components ├── organisms ├── component-a ├── component-a.scss ├── component-a.html.twig -
js component example
component-a.jsfile will be the entry point and_component-a.scsswould be imported inside.// component-a.js import './_component-a.scss';
├── src ├── components ├── organisms ├── component-a ├── component-a.js ├── _component-a.scss ├── component-a.html.twig -
⛔️ DON'T DO EXAMPLE. Don't make two entry points for one component
├── src ├── components ├── organisms ├── component-a ├── component-a.js ├── component-a.scss ├── component-a.html.twig
build/components — the folder where transpiled results of components are living.
Every component placed there in a separate folder.
build/app.css — placed in the root of build folder.
build/vendors/ — folder for vendors. Webpack set up in a way to make own
vendor file in a case we have a separate vendor for the component. For example, we have
slider.js where we make import of forEach nodeList polyfil. In a case only slider.js component
uses forEach nodeList polyfil, you would find externals-slick.js file in a build/vendors/ folder.
Then we could make a cute and tiny Drupal library. Otherwise, if a few components import forEach nodeList polyfil, you should find in the vendor folder externals.js. That means you have to make separate library externals and put it as a dependency for your both components. See examples, bellow.
We could have three types of vendors
- externals goes from
src/externals - shared small self-writting helpers, goes from
src/shared - commons goes from
node_modules
So, for all of them behavior described above and examples provided bellow is fair.
# the only one component imports forEach nodeList polyfil
slider:
version: 1.0
js:
build/vendors/externals-slider.js: {}
build/components/slider/slider.js: {}# a few components import forEach nodeList polyfil
slider:
version: 1.0
js:
build/components/slider/slider.js: {}
dependencies:
- draft_starter/externals
accordion:
version: 1.0
js:
build/components/accordion/accordion.js: {}
dependencies:
- draft_starter/externals
externals:
version: 1.0
js:
build/vendors/externals.js: {}-
Make general variables and mixins are available in the component scss file
@import '../../init';
-
Where to put static assets
images— that's the folder for static imagesfonts— that's the folder for fonts├── fonts ├── icomoon ├── comic-sans -
Bring to scss component file static image.
$base-pathgeneral variable could help you to avoid a bit ugly paths like this../../images/joshua-coleman-671580-unsplash.png@import '../../init'; .hero { background-image: url(#{$base-path}/images/joshua-coleman-671580-unsplash.png); }
-
Foundation used as a base framework, 4 general components inclued in app.scss via _foundation-general.scss partition by default
// _foundation-general.scss // Global styles @include foundation-global-styles; @include foundation-forms; @include foundation-typography; @include foundation-table;
_foundation-general.scss file contains commented references to all kind of Foundation components
-
Foundation variables could be customized in
src/settings/_settings.scssfile -
Foundation scss component example
// src/components/button/button.scss @import '../../init'; @include foundation-button; ...
-
Foundation js component example
// src/components/tabs/tabs.js import $ from 'jquery'; import { Foundation } from 'foundation-sites/dist/js/plugins/foundation.core'; import 'foundation-sites/dist/js/plugins/foundation.tabs'; import 'foundation-sites/dist/js/plugins/foundation.util.keyboard'; import 'foundation-sites/dist/js/plugins/foundation.util.imageLoader'; import './_tabs.scss'; ... const foundationTabs = new Foundation.Tabs($tabs, {}); ...
-
Folders, files, variables should be named in a kebab-case-started-with-small-letter
// _variables.scss $primary-color: #c00;
-
Partitions should start with an underscore
_i-am-a-partition.scss.
❗️EXCEPTION, if you have a js component which is a Class — component js file should
start with capital letter. For example, Slider-testimonials.js.